PHP学习研究:PHP.INI配置文件漫游

  一般来说你不需要改变PHP设置,它根据默认的配置通常就能很好的工作。但作为PHP设计者的开发人员们考虑到用户可能偶尔需要针对特定应用程序对PHP语言的一些功能进行调整。因此,他们将一些PHP变量通过名为php.ini的配置文件显示出来。此配置文件允许用户调整PHP多项功能,包括设置文件路径以及目录、改变会话以及数据库参数,以及激活扩展选项(activating extensions)等。

  在开始我们的介绍之前,我们将对PHP配置文件的组织方式进行简要的说明。文件命名为php.ini的原因之一就是它遵循许多Windows应用程序中INI文件的常见结构。它是一个ASCII文本文件,并且被分成几个不同名称的部分,每一部分包括与之相关的各种变量。每一部分类似于如下结构:

  [MySection]

  variable="value"

  anothervariable="anothervalue"

  各部分的名称通过方括号括起来放在顶部,然后将是一对对任意数量的“变量名——值”,每一对占单独一行。同常规的PHP代码要求一样,变量名区分大小写且不能包含空格,变量的值可以是数字、字符串,或者布朗型(Boolean)。

  每一行如果以分号开头则表明该行是注释语句。这也使得允许或禁止PHP功能变得非常简单。你只需要将相关语句注释而无需删除,该语句就不会被系统解析。特别是当你希望在一段时间以后重新打开某种功能的时候特别方便,因为你不需要在配置文件中将此行删除。

  为了便于PHP识别,php.ini文件必须要么放在当前目录,要么放在$PHPRC环境变量所定义的目录中,或者是在编译时所指定的目录(对Windows PHP来说即Windows主目录)。

  在通过修改php.ini文件改变PHP配置之后,需要重启Web服务器以使配置改变生效(当然这是在通过Web服务器使用PHP的情况下)。对于PHP命令行使用模式,每次只要涉及到PHP二进制程序的时候系统都会读取配置文件。

  这是配置文件漫游的第一站也是非常重要的一站:语言解释程序相关选项。第一行是引擎变量,它将控制PHP引擎是“on”还是“off”。关闭引擎则意味着嵌入的PHP代码将不会被Web服务器所解析。通常将其关闭是毫无意义的,所以保持开启状态。

   
 
engine = On

  short_open_tag则控制解析器是否识别简写的<?...?>标志,即将其等价为标准<?php...?>标志。如果预计简写标志会和别的语言产生冲突,或者希望对PHP代码采用严格的语法规则,那么可以将其关闭。

  short_open_tag = On

  通常而言,在PHP脚本中的会话、cookie或者HTTP文件头数据必须在脚本产生任何输出之前发送出去。如果在你的应用程序中不可能实现,你可以通过允许PHP称之为output buffering功能来达到这一目的,此功能通过output_buffering变量进行控制。

  如果打开output buffering,PHP将把脚本产生的运行结果存放在特殊的内存缓冲区域内,并在得到明确指示时才将其发送出去。通过这样的方式,你甚至可以在脚本中部或者脚本尾部发送特殊的HTTP文件头以及cookie数据。当然,这样会造成脚本运行性能一定程度的下降。

  output_buffering = Off

  你还可以为output_buffering变量赋值以指定缓冲区域大小,例如:

  output_buffering = 2048

  当PHP启动的时候,它将在Web服务器标准头信息中添加PHP版本号信息。如果希望关闭此功能,可以将expose_php设置为false。这项功能非常有用,例如,可以在Web服务器上屏蔽此信息以防范潜在的黑客攻击。

  expose_php = On

  现在来看看如何设置查找路径以及差错控制。

  可以通过include_path变量设置PHP查找路径。它允许包括一系列目录。在相关文件调用缺少指定路径的情况下,PHP将自动检查这些目录。

  如果有频繁使用的函数库或类,也可以将其位置写在这里以方便查找。这也是一个很好的添加PHP的PEAR目录路径的地方,此路径将包括很多可重用的类。

  include_path = ".:/usr/local/lib/php/pear:"

  Windows用户可以通过分号分割路径名来指定多路径;UNIX用户则需要使用冒号。

  另外两个有趣的变量是auto_prepend_file以及auto_append_file。这些变量指定PHP自动添加到任何PHP文档文件头或文件尾的其他文件。这对于为PHP产生的页面添加页眉或页脚非常有用,可以节省为每个PHP文档添加代码的时间。但需要注意这里的指定文件将会添加到所有的PHP文档中,所以这些变量必须适合单应用程序(single-application)的服务器。

  所包含的文件要么是PHP脚本,要么是普通的HTML文档。嵌入式PHP代码必须用标准<?php...?>标记括起来。

  auto_prepend_file = /home/web/includes/header.php

  auto_append_file = /home/web/includes/legal.php

  PHP的差错可以分为四类:解析错误、关于代码小问题的提示(notice)(例如变量未初始化)、警告(除了非致命错误),以及致命错误(fatal errors)。通常而言,当PHP遇到除第二种(关于代码小问题的提示)以外的错误时,将显示错误信息,并且如果属于致命错误则会立即停止代码处理。你可以通过修改error_reporting变量来对此功能进行修改。此变量可以接收一比特位的错误代码,且只显示同这些代码相同的错误。

  error_reporting = E_ALL

  要关闭显示所有错误——在产品代码中通常建议这么做——可以将display_errors变量设置为false,并使用log_errors变量将信息写入错误日志(error log)。

  此举可以提高系统的安全性能——通过关闭错误显示,你可以将系统的特定信息隐藏起来,恶意用户就无法利用这些信息试图入侵站点或应用程序。但你应当通过将error_log变量指定为文件名或特殊值“syslog”,从而将这些错误信息写入到自定义日志文件或者系统日志中。请记住定期检查这些文件,以知道在应用程序内部到底发生了什么。

  display_errors = Off

  log_errors = On

  error_log = "error.log"

  PHP可以使用很多不同的扩展选项。在UNIX系统中,扩展选项需要在编译时创建;而对于Windows,二进制DLL文件将随PHP发布而将自己包括进去。变量extension_dir包括了PHP应当查看相关扩展选项的目录名。

  extension_dir = "C:\Program Files\Internet Tools\Apache\bin\php4\extensions"

  Windows下的PHP包括了20种不同的扩展选项,并且全部都列在了php.ini文件中(通过注释)。要激活某个特定的扩展选项只需要将相应行首的分号去掉并重启服务器就可以了。如果要禁用某个扩展选项(比如在需要提升系统性能的情况下),只需要在行首重新添加分号。

  如果扩展选项没有列在php.ini文件中,可以使用变量extension,然后将相应DLL文件名传递给此变量。

  extension=php_domxml.dll

  extension=php_dbase.dll

  设置extension-specific变量
变量extension-specific被存放在配置文件中一个单独的区域。比如,所有同MySQL扩展功能相关的变量都应当存储在php.ini中的[MySQL]区域。

  如果需要使用PHP的mail()函数,则需要设置以下三个变量。当通过PHP mail()函数发送电子邮件信息时需要使用SMTP以及变量sendmail_from(Windows系统)或变量sendmail_path(UNIX系统)。对于Windows,这些变量设置了所用到的SMTP服务器以及显示在电子邮件信息中的“From:”地址;而对于UNIX,变量sendmail_path则对邮件传输设置了MTA(邮件传输代理,mail transfer agent)的路径。

  SMTP = myserver.localnet.com

  sendmail_from = <A href="mailto:me@localhost.com">me@localhost.com</A>

  sendmail_path = /usr/sbin/sendmail

  变量java.class.path、java.home、java.library以及java.library.path全部用来设置查找Java类以及库的路径。这些值将被Java扩展所使用,所以如果希望PHP能正确的同Java程序进行集成,则必须确保这些变量被正确的设置。

  java.class.path = .\php_java.jar

  java.home = c:\jdk

  java.library = c:\jdk\jre\bin\hotspot\jvm.dll

  java.library.path= .\

  变量session.save_path指定了保存会话信息所需的临时目录。通常而言,此目录默认为/tmp,但由于在Windows系统中此默认目录并不存在,所以你必须将其重新设置为正确的Windows临时目录,否则会话处理程序将会在调用session_start()函数时弹出讨厌的出错信息。同时可以通过变量session.cookie_lifetime来控制会话cookie的有效期。

  session.save_path = c:\windows\temp

  session.cookie_lifetime = 1800

  在php.ini中,有很多同PHP安装的安全问题相关的变量。其中最有趣的是safe_mode变量,建议针对ISP以及共享主机服务(shared-hosting services)对其进行设置,此变量将对用户对PHP的使用范围进行限制。
 
safe_mode = Off

  当safe mode打开的时候,可以通过变量safe_mode_include_dir指定在何目录中查找相关文件。通过将二进制程序放在特定目录并使用safe_mode_include_dir变量将目录告之PHP,PHP将对可使用exec()命令运行PHP脚本的程序种类进行限制。在此目录中仅二进制文件可以通过exec()命令进行访问。

  safe_mode_include_dir = /usr/local/lib/php/safe-include

  safe_mode_exec_dir = /usr/local/lib/php/safe-bin

  还可以通过变量open_basedir来限制文件操作。此变量将设置作为文件操作根(root)的目录名。此变量设置后,对于PHP来说,存放在此目录树以外的文件将无法访问。这对于在共享系统中将用户限制在各自的home或者Web目录是一种很好的方法。

  open_basedir = /home/web/

  变量max_execution_time设置了在强制终止脚本前PHP等待脚本执行完毕的时间,此时间以秒计算。当脚本进入了一个无限循环状态时此变量非常有用。然而,当存在一个需要很长时间完成的合法活动时(例如上传大型文件),这项功能也会导致操作失败。在这样的情况下必须考虑将此变量值增加,以避免PHP在脚本正在执行某些重要过程的时候将脚本关闭。

  max_execution_time = 90

  刚提到了上传,现在来看看如何配置uploads变量以及form变量。

  如果我们在文章前面所讨论安全配置所提供的安全强度还不能满足你的要求,可以通过关闭文件上传或设置每次上传最大文件尺寸限制来进一步提高安全强度。以上两种功能将分别通过变量file_uploads和upload_max_filesize来实现。通常来说,除非系统中有为接收文件而设计的应用程序(例如基于Web FTP服务的图片册),你应当设置一个相对较小的文件尺寸限制值。

  file_uploads = On

  upload_max_filesize = 2M

  如果你对于上传文件并不关心,但在PHP应用程序中使用了大量的表单,这里有两个变量将会让你产生很大的兴趣。首先是变量register_globals,它解决了PHP开发人员长期以来的心头之痛。在PHP 3.x中,此变量默认为On。由此当提交表单时表单变量将自动的转换成PHP变量。

  在PHP 4.x中,出于安全考虑,此变量默认设置为Off。由此,表单变量将只能通过特定的$_GET以及$_POST进行访问。这也造成了很多用PHP 3.x编写的脚本在运行时出现问题,要求开发人员重写脚本并对其重新测试。比如,输入到表单域<input type="text" name="email">中的值对于PHP 3.x脚本来说将可以理解为$email;而在PHP 4.x脚本中却被作为$_POST['email']或者$_GET['email']。

  通常情况下可以将此变量设置为Off,这样可以对通过表单进行的脚本攻击提供更为安全的防范措施。如果需要考虑到对早期PHP 3.x脚本的兼容问题,则应当置于On。

  register_globals = Off

  同表单提交相关的一个变量是post_max_size,它将控制在采用POST方法进行一次表单提交中PHP所能够接收的最大数据量。似乎不大可能需要将默认的8 MB改得更大。相反,应当适当将其降到更为实际的数值。但如果希望使用PHP文件上传功能,则需要将此值改为比upload_max_filesize还要大。

  post_max_size = 8M

  在PHP 5中增加了max_input_time变量。此变量可以以秒为单位对通过POST、GET以及PUT方式接收数据时间进行限制。如果应用程序所运行环境处在低速链路上,则需要增加此值以适应接收数据所需的更多时间。

  max_input_time = 90

  你还可以通过调整一些变量值来提升PHP解析器的性能。为了避免正在运行的脚本大量使用系统可用内存,PHP允许定义内存使用限额。通过memory_limit变量来指定单个脚本程序可以使用的最大内存容量:

  memory_limit = 8M

  变量memory_limit的值应当适当大于post_max_size的值。

  另一项可以用于提高性能的方法是禁用变量$argc以及$argv,这两个值被用于存放在命令行中传递给应用程序的参数数量以及实际参数值。

  register_argc_argv = false

  类似,还可以禁用$HTTP_GET_VARS以及$HTTP_POST_VARS,因为在使用$_GET以及$_POST的今天你不大可能用到前两种方式。禁用此功能可以带来性能上的提升,但这只能通过PHP 5中的变量register_long_arrays实现。

  register_long_arrays = false

  函数ini_set()

  最后,需要注意ini_set()函数。当PHP读取php.ini配置文件中的所有设置信息的同时,它还提供了采用ini_set()函数根据per-script原则更改这些设置的功能。此函数接收两个参数:需要调整的配置变量名,以及变量的新值。例如,在某脚本出现时增加最大执行时间(maximum execution time):

  <?php

  ini_set('max_execution_time', 600)

  // more code

  ?>

  这样的设置将仅仅影响被设置的脚本。一旦脚本执行完毕,该变量将自动恢复到原始值。

  如果PHP应用程序运行在一个共享服务器上,你不大可能可以访问到主php.ini配置文件。这时,函数ini_set()就可以允许根据特殊要求对PHP配置做动态修改,这将会给你带来很大的方便。

时间: 2024-08-30 12:50:41

PHP学习研究:PHP.INI配置文件漫游的相关文章

PHP学习研究-PHP.INI配置文件漫游

一般来说你不需要改变PHP设置,它根据默认的配置通常就能很好的工作.但作为PHP设计者的开发人员们考虑到用户可能偶尔需要针对特定应用程序对PHP语言的一些功能进行调整.因此,他们将一些PHP变量通过名为php.ini的配置文件显示出来.此配置文件允许用户调整PHP多项功能,包括设置文件路径以及目录.改变会话以及数据库参数,以及激活扩展选项(activating extensions)等. 在开始我们的介绍之前,我们将对PHP配置文件的组织方式进行简要的说明.文件命名为php.ini的原因之一就是

PHP.INI配置文件漫游(2)

文章第一部分已经带领你领略了php.ini文件的结构,并且说明了如何修改PHP查找路径.差错处理,以及解析器的相关选项.第二部分将深入配置文件,内容包括如何激活PHP扩展选项.针对PHP脚本设置资源限制,以及通过PHP脚本动态改变配置变量. 激活扩展选项 PHP可以使用很多不同的扩展选项.在UNIX系统中,扩展选项需要在编译时创建:而对于Windows,二进制DLL文件将随PHP发布而将自己包括进去.变量extension_dir包括了PHP应当查看相关扩展选项的目录名. extension_d

OpenAI 教你如何构建深度学习研究的基础设施

编者按:OpenAI研究工程师Vicki Cheung, Jonas Schneider , Ilya Sutskever, and Greg Brockman在本文中分享了从事Deep Learning研究工作所需要的基础设施(软件.硬件.配置和编制),举例说明如何运用开源Kubernetes-ec2-autoscaler自动扩展深度学习研究中的网络模型,将有助于广大深度学习研究爱好者构建自己的深度学习基础设施. 深度学习是一门实证科学,一个研究团队的基础设施建设将对未来的研究工作产生重大影响

用java读写ini配置文件

??? 在java中,配置文件一般主要是两种形式:xml文件或者property文件.但大部分人都习惯使用ini文件,而且ini文件的分节以及注释功能,比起xml,也是易懂易用的. ??? 在vc中类库中有读写ini文件的标准函数.在dephi或其他语言中,也可以用windows的api函数来读写ini文件.但在java中似乎没有现成的类和方法可供使用.虽然java可以通过加载dll文件的方法来调用windows的api,但总觉得不够正宗. ??? 于是自己写了个读写ini配置文件的类,供大家参

用ASP读INI配置文件的函数

选择自 mind_1220 的 Blog 要求:  能够读取按照  INI文件的Section和Key来读出相应的Value.  比如一个配置文件    SMSVote.ini  ---------------------------------  [SMSVote]  Server=(local)  DB=SMSVote  User=sa  PassWord=123  [DB2Vote]  Server=192.168.0.1  DB=DB2  User=sa  PassWord=  ----

python读写ini配置文件方法实例分析

  本文实例讲述了python读写ini配置文件方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 import ConfigParser import os class ReadWriteConfFile: currentDir=os.path.dirname(__file__) fil

asp.net程序来读取多语言版本Ini配置文件

这是asp.net程序来读取多语言版本Ini配置文件的开发示例,主要分为以下三个部分: 1. Ini 配置文件 2. 读取Ini配置文件的DLL 3. Web页面调用与内容显示 4. 数据库表T_User,如右图 首先说明一下Ini 文件格式:如下图其中[M_Index]节点和该节点下的所有的key和value,其中[M_Index]节点的名称是对应开发示例中的每个页面所在的文件夹名称的第一个字母加下划线再加该页面的名称组合而成,如 M_Index 则表示Manager文件夹下面有一个Index

详解Facebook田渊栋NIPS2017论文:让大家都能做得起深度强化学习研究的ELF平台

这周,机器学习顶级会议 NIPS 2017 的论文评审结果已经通知到各位论文作者了,许多作者都马上发 Facebook/Twitter/Blog/朋友圈分享了论文被收录的喜讯.大家的熟人 Facebook 人工智能研究院研究员田渊栋也有一篇论文入选,论文名为「ELF: An Extensive, Lightweight and Flexible Research Platform for Real-time Strategy Games」.这篇论文介绍了他们构建的强化学习研究平台 ELF,为环境

Facebook最新对抗学习研究:无需平行语料库完成无监督机器翻译

Facebook试图将机器翻译的成功扩展到低资源语言对,研究了在没有任何平行数据的情况下,实现无监督的机器翻译.他们提出的模型有效地学习了在不使用任何标记数据的情况下进行翻译. 论文下载链接:https://arxiv.org/pdf/1711.00043.pdf 相信大家都知道,最近在机器翻译领域取得了令人印象深刻的成果,而这主要归功于最近在深度学习方面所取得巨大进步,以及大规模平行语料库(large-scale parallel corpora)的可用性.我们已经进行过无数次尝试,试图将这些