php.ini全方位解读

moj-php-mvc-framework-wide

php.ini Options
理解
该段配置主要php提供了个性化的配置选项,都知道的是php.ini控制着PHP环境的全局配置,如果将网站挂在托管平台上一般没有权限去修改人家的php.ini,但是如果非要修改一些PHP环境的配置的话,可以在自己的根目录下创建一个.user.ini文件,用于覆盖掉原有的全局配置。
[cc lang=”bash” theme=”twitlight” width=”100%” height=”700″ lines=”40″ noborder=”true”]
#设置在自己文件的根目录下配置user.ini的文件名
;user_ini.filename = “.user.ini”
#如果该值为null,那么user.ini的功能将失效
;user_ini.filename =
#加载user.ini的时间间隔,默认为300秒
;user_ini.cache_ttl = 300
[/cc]

应用
1.新建一个文件test.php,在里面写入一下代码
[cc lang=”php” theme=”twitlight” width=”100%” height=”700″ lines=”40″ noborder=”true”]


[/cc]
此时执行 php test.php,因为PHP环境默认不支持短标签,浏览器加载会报错或者不显示任何信息。
2.在php.ini中配置user.ini选项
[cc lang=”bash” theme=”twitlight” width=”100%” height=”700″ lines=”40″ noborder=”true”]
user_ini.filename = “.user.ini”
[/cc]
并在和test.php同级目录下创建 .user.ini 文件,并写入一下代码
[cc lang=”bash” theme=”twitlight” width=”100%” height=”700″ lines=”40″ noborder=”true”]
short_open_tag = On
asp_tags = On
[/cc]
重启环境
3.再次执行,会发现出现了两个Hello World!

注意
并不是所有的配置项都可以配置在user.ini中,有些即便是配置在user.ini中也是不会生效的。具体看此链接ini list

Language Options
基本配置项
[cc lang=”bash” theme=”twitlight” width=”100%” height=”700″ lines=”40″ noborder=”true”]
#是否支持PHP语言在Apache服务器下运行,默认为On
engine = On
#是否支持这种短标签,php.ini建议不要开启这种短标签,终于php7中已经把这个争议性的东西去掉了。
short_open_tag = Off
#是否支持ASP方式的标签,php7也将这个争议性的东西去掉了
asp_tags = Off
#浮点数的位数,默认位数为14
precision = 14
#是否忽略用户的“打断”,也就是当执行一段执行较旧的脚本时,有可能会因为浏览器或者用户刷新的原因而中断,如果设置该选项,则会忽略掉该中断
ignore_user_abort = On
[/cc]

有关Output的配置项
[cc lang=”bash” theme=”twitlight” width=”100%” height=”700″ lines=”40″ noborder=”true”]
#可输出缓存的大小
output_buffering = 4096
1.打开了php输出缓存: echo,print -> php output_buffring -> server buffering -> browser buffering -> browser display
2.未打开php输出缓存: echo,print -> server buffering -> browser buffering -> browser display
[/cc]

有关safe mode的配置项
[cc lang=”bash” theme=”twitlight” width=”100%” height=”700″ lines=”40″ noborder=”true”]
#默认为关闭状态
safe_mode = Off
safe_mode_gid = Off
safe_mode_include_dir =
safe_mode_exec_dir =
safe_mode_allowed_env_vars = PHP_
safe_mode_protected_env_vars = LD_LIBRARY_PATH
;open_basedir =
disable_functions =
disable_classes =
[/cc]
什么是安全模式?
简单说就是以安全的方式来运行PHP脚本,在采用安全模式的时候,以下内容将被限制,不过即便是开启了安全模式,还是可以通过配置来解决掉以下的限制

  • 尝试获取有关PHP版本信息的函数将被限制
  • 尝试操作系统文件的函数将被限制
  • 尝试对数据库的插入操作将被限制

有关性能优化的配置项
[cc lang=”bash” theme=”twitlight” width=”100%” height=”700″ lines=”40″ noborder=”true”]
#决定 PHP 所使用的真实路径缓冲区的大小,当脚本执行时会include”file”或者操作文件之类的,如果访问量较大应提高该值
realpath_cache_size = 16k
realpath_cache_ttl = 120
[/cc]
解析
该段配置主要PHP在执行时对文件操作时设定的缓冲区有关,具体的原因在于,当处理较深的目录时,PHP会逐级进行检查,去检查realpath,尤其是存在大量的include_once或者require_once时,每次都要检查该路径是否真实存在,这时就会产生大量的lstat64(会造成IO/CPU的压力迅速上升),这曾经是PHP(Version:5.2.5)的bug之一,不过在5.3之后已经得到了高性能的改进。这里涉及到realpath_cache的概念,不光对一个深路径的尾节点进行cache,也会对一个中间路径进行cache,所以在使用框架时,realpath_cache_size 要设置至少在256K以上才行,而realpath_cache_ttl要设置的久一点才好,当然也不是越久越好,半小时到一小时之间即可。
【Bug详情】http://https://bugs.php.net/bug.php?id=43864
【参考】http://blog.sina.com.cn/s/blog_467eb8ca01015hd9.html

Miscellaneous

[cc lang=”bash” theme=”twitlight” width=”100%” height=”700″ lines=”40″ noborder=”true”]
#是否暴露PHP被安装在服务器上的事实(在http头中加上其签名X-Powered-By:PHP/5.3.2)如果关闭的话,不会显示该项。
expose_php = On
[/cc]

Resource Limits
[cc lang=”bash” theme=”twitlight” width=”100%” height=”700″ lines=”40″ noborder=”true”]
#一段php脚本的执行上限时间,深有感触的东西,默认应该是60,不过我个人经常因为某些原因改成300
max_execution_time = 60
#对通过POST、GET以及PUT方式接收数据时间进行限制
max_input_time = 60
#输入POST、GET变量的存储级别吧?网上的资料也很少,基本上是这个意思
max_input_nesting_level = 64
#内存限制,通常一个轻量级的小应用,设置为64M即可,而对于类似于WordPress等应用可以大概设置为512M
memory_limit = 128M
[/cc]

Error handling and logging

Data Handling

数据绑定,主要是一些有关于数据操作和数据上传等有关的配置,例如有关于$_GET ,$_POST等等的。
[cc lang=”bash” theme=”twitlight” width=”100%” height=”700″ lines=”40″ noborder=”true”]
#URL参数中output的分隔符
;arg_separator.output = “&”
#URL参数中input的分隔符
arg_separator.input = “;&”
#GET POST COOKIE SERVER 这种全局变量的执行顺序
variables_order = “GPCS”
#请求全局变量的顺序GET POST
request_order = “GP”
#不允许注册用户注册全局变量
register_globals = Off
#是否开启早期的 $HTTP_*_VARS 这种长类型的模式
register_long_arrays = Off
#也是一种注册全局数组的方式,不过该选项开启的时候,会增加内存的开销
register_argc_argv = Off
#启用后,SERVER 和 ENV 变量在他们第一次使用后 (Just In Time) 便被创建,而不是等到脚本开始运行时。如果这些变量没有在脚本总使用,启用这个变量会提高服务器性能。
要使此选项有效,PHP 配置选项 register_globals, register_long_arrays, 和 register_argc_argv 必须禁用。
auto_globals_jit = On
#上传的文件的最大尺度
post_max_size = 8M
#下面是一些魔术方法
magic_quotes_gpc = Off
# Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.
magic_quotes_runtime = Off
# Use Sybase-style magic quotes (escape ‘ with ” instead of \’).
magic_quotes_sybase = Off

#自动加载某文件到php脚本前
auto_prepend_file =
#自动加载某文件到php脚本后
auto_append_file =
#默认的Mine类型
default_mimetype = “text/html”
[/cc]

Paths and Directories
路径和文件
[cc lang=”bash” theme=”twitlight” width=”100%” height=”700″ lines=”40″ noborder=”true”]
#设置默认的包含路径,默认值为 “.;/path/to/php/pear”
#UNIX: “/path1:/path2”
include_path = “.:/php/includes”
# Windows: “\path1;\path2”
include_path = “.;c:\php\includes”
#在 web 服务器的主文档目录中包含动态内容如脚本和可执行程序有时被认为是一种不安全的实践。
PHP在服务器上的根目录,在安全模式下此目录之外的文件一律不被解析;
如果PHP编译时没有指定FORCE_REDIRECT,并且在任何web服务器(除了IIS)中以CGI方式运行PHP,则应设定doc_root
如果设置了该项,那么 PHP 就只会解释doc_root 目录下的文件,并确保目录外的脚本不会被 PHP 解释器执行
doc_root =
#这配置项和上面的doc_root是很类似的,当只设置了doc_root时,用户访问时,只可以访问doc_root目录下的脚本,如果这时设置了user_root的话,那么就可以访问doc_root/user_dir下的脚本了,也就是一个连接的过程
user_dir =

#扩展所在的目录
extension_dir = “C:/Wnmp/php5/ext”

#是否允许用户在运行时加载PHP扩展,即在脚本运行期间加载
enable_dl = Off

#提供一个安全的方式在web服务器下以CGI的方式来运行PHP脚本,如果是IIS服务器则需要关闭
cgi.force_redirect = 1

#如果开启,则针对每一次请求,CGI都会返回200状态码,默认是关闭的。
cgi.nph = 0
#另外在Linux上,相关的一个趣闻在https://segmentfault.com/q/1010000004656085
cgi.cgi.rfc2616_headers=0

如果cgi.force_redirect是开启的,并且没有在Apache或者Netscape服务器下使用php,需要设定一个环境变量,PHP将会寻找该变量然后继续执行,设置该变量会造成安全问题,默认关闭
cgi.redirect_status_env=0

具体参见鸟哥这篇关于Nginx+PHP搭配的安全隐患问题http://www.laruence.com/2010/05/20/1495.html,默认是开启的,建议关闭
cgi.fix_pathinfo=1
[/cc]

File Uploads
[cc lang=”bash” theme=”twitlight” width=”100%” height=”700″ lines=”40″ noborder=”true”]
#是否开启文件上传
file_uploads = On
#文件上传后的临时目录,默认不设置,根据具体系统来控制
;upload_tmp_dir =
#上传文件的最大size
upload_max_filesize = 2M
#单个请求可上传的文件数量
max_file_uploads = 20
[/cc]

Fopen wrappers

[cc lang=”bash” theme=”twitlight” width=”100%” height=”700″ lines=”40″ noborder=”true”]
#是否允许打开网络上的文件
allow_url_fopen = On
#是否允许包含网络上的文件
allow_url_include = Off
#设置一个匿名的FTP邮箱,默认为空
;from=”john@doe.com”
#定义User_agent字符串,默认为空
;user_agent=”PHP”
默认的socket超时时间
default_socket_timeout = 60
[/cc]

Dynamic Extensions

#如果需要设置一些可以动态加载的扩展,则需要设置这个地方。windows下为.dll结尾的扩展,而Linux下为.so结尾的扩展
[cc lang=”bash” theme=”twitlight” width=”100%” height=”700″ lines=”40″ noborder=”true”]
;extension=php_bz2.dll
extension=php_curl.dll
;extension=php_dba.dll
;extension=php_exif.dll
;extension=php_fileinfo.dll
;extension=php_gd2.dll
;extension=php_gettext.dll

extension=yaf.so
[/cc]

Module Settings

模块的具体配置
[cc lang=”bash” theme=”twitlight” width=”100%” height=”700″ lines=”40″ noborder=”true”]
[Date]
[filter]
[iconv]
[intl]
[sqlite]
[sqlite3]
[Pcre]
[Pdo]
[Pdo_mysql]
[Phar]
[Syslog]
[mail function]
[SQL]
[ODBC]
[Interbase]
[MySQL]
[MySQLi]
[mysqlnd]
[OCI8]
[PostgresSQL]
[Sybase-CT]
[bcmath]
[browscap]
[Session]
[MSSQL]
[Assertion]
[COM]
[mbstring]
[gd]
[exif]
[Tidy]
[soap]
[sysvshm]
[ldap]
[mcrypt]
[dba]
[/cc]

php.ini全方位解读
Tags:

发表评论

电子邮件地址不会被公开。 必填项已用*标注