PHP常用配置
Php配置文件:php.ini(使用‘;’表示注释)
Php的配置项可以在配置文件中配置,也可以在脚本中使用ini_set()函数临时配置。
语言相关配置:
1. engine:设置PHP引擎是否可用,默认值为On,若设置为Off则无法使用PHP。
配置示例:
engine = On
2. short_open_tag:是否允许PHP脚本使用短开放标记,将“<?php ?>”改为“<? ?>”。但这个语法与XML相同,这在某些情况下可能会导致问题,所以一般建议关闭该项。
配置示例:
short_open_tag = Off
3. asp_tags:是否支持ASP风格的脚本定界,即“<% %>”。
配置示例:
asp_tags = On
4. precision:指定在浮点数表示中显示的有效数字。该项在Win32系统中设置为14,在Linux中设置为12.
配置示例:
precision = 14
5. output_buffering:设置是否使用输出缓冲,或者设置输出缓冲区的大小。使用输出缓冲会使性能稍稍下降。
配置示例:
output_buffering = 4096
output_buffering = On
6. output_handler:设置将输出返回给请求用户之前要把所有输出传递给一个函数。例如,假设你希望将输出返回给浏览器之前先对所有输出进行压缩,可以将该项配置为PHP的压缩处理函数“ob_gzhandler”。
配置示例:
output_handler = “ob_gzhandler”
注意,不能在将output_handler设置为ob_gzhandler的同时启用zlib.output_compression。
7. zlib.output_compression:通过设置为“On”或“Off”决定是否在输出返回给浏览器之前先自动压缩,通过赋一个整数值,可以启用输出压缩,同时设置压缩缓冲区大小。
配置示例:
zlib.output_compression = Off
8. zlib.output_handler:如果zlib库不可用,zlib.output_handler将指定一个特定的压缩库。
9. implicit_flush:启用时,每次调用print()或echo(),以及完成各个嵌入的HTML块后,将自动清除或刷新其内容的输出缓冲区。当服务器需要非常长的时间来编译结果或完成某些计算时,这可能很有用。在这些情况下,可以利用这个特性想用户输出状态更新,而不是等待服务器完成整个过程后才输出。
配置示例:
implicit_flush = Off
10. ignore_user_abort:是否设置即使在用户中止请求后也坚持完成整个请求。在执行一个长请求的时候应当考虑打开它,因为长请求可能会导致用户中途中止或浏览器超时。该配置项可以用于实现类似Unix下的crontab(定时任务计划)功能。
配置示例:
ignore_user_abort=On
11.zend.enable_gc:设置是否开启PHP的垃圾回收机制。
配置示例:
zend.enable_gc=On
安全相关配置:
1. safe_mode:是否启用安全模式。
配置示例:
safe_mode = On
打开时,PHP将检查当前脚本的拥有者是否和被操作的文件的拥有者相同,相同则允许操作,不同则拒绝操作。开启安全模式的前提是你的目录文件权限已完全分配正确。开启该项会减慢程序执行效率。
2. safe_mode_gid:开启时表示修改安全模式的行为,从执行前验证UID改为验证组ID。
配置示例:
safe_mode_gid = On
3. safe_mode_include_dir:指示多个路径,启动安全模式时在这些路径中将忽略安全模式。
配置示例:
safe_mode_include_dir = “/chsfc/data;/chsfc/log” (在基于UNIX的系统多个路径之间使用冒号分隔,在Windows中使用分号分隔)
4. safe_mode_env_vars:当启用安全模式时,可以只用此指令允许执行用户的脚本修改某些环境变量。可以允许修改多个变量,每个变量之间用逗号分隔。
5. safe_mode_exec_dir:此指令指定一些目录,其中的系统程序可以通过诸如system()、exec()或passthru()等函数执行。为此必须启用安全模式。在所有操作系统中(包括Windows),都必须使用斜线(/)作为目录的分隔符。
6. safe_mode_protected_env_vars:此指令保护某些环境变量不能被putenv()函数修改。默认情况下,变量LD_LIBRARY_PATH是受保护的,因为如果在运行时修改这个变量可能导致不可预知的结果。本项中声明的所有变量都覆盖 safe_mode_allowed_env_vars指令中声明的变量。
7. open_basedir:指定允许PHP进行文件系统操作的目录,任何对这些目录以外的文件操作都会导致错误。
配置示例:
openbasedir="C:\inetpub\wwwroot;C:\inetpub\temp"(目录之间由分号分隔)
(实际上“C:\inetpub\temp”指定的是目录前缀,“C:\inetpub\temp\”指定的才是特定的目录)
8. disable_functions:该指令接受一个用逗号分隔的函数名列表,以禁用特定的函数。
配置示例:
disable_functions = “chown,chroot”
出于安全原因考虑,禁止使用一些特定的函数,此时若在程序中调用其中的任何一个函数都会出现Warning: ..... has been disabled for security reasons in .....
9. disable_classes:出于安全原因,禁用特定的类。禁用多个类时,类名之间使用逗号分隔。
配置示例:
disable_classes=”vector,graph”
10. allow_url_include:PHP通过此选项控制是否允许通过include/require来执行一个远程文件。
配置示例:
allow_url_include = Off
此项配置为On存在安全漏洞:首先,远程文件可能包含可运行的PHP木马,其次,若将远程文件url作为参数传递,用户可以通过传递一个不存在的文件url来访问使得服务器报错,然后从报错信息中得到服务器的文档路径,通过一定手段获取服务器上的敏感文件。
11. allow_url_fopen:是否允许打开远程文件。
配置示例:
allow_url_fopen = Off
该项配置为On存在安全漏洞。
12. register_globals:PHP在进程启动时,会根据register_globals的设置,判断是否将$_GET、$_POST、$_COOKIE、$_ENV、$_SERVER、$REQUEST等数组变量里的内容自动注册为全局变量。
配置示例:
register_globals = Off
建议关闭该配置项,开启会增加安全漏洞的数量,并隐藏了数据的来源。如果必须要开发一个在register_globals开启的环境中布署的应用,必须要让所有变量在使用前进行初始化,当register_globals开启时,任何使用未初始化变量的行为都意味着安全漏洞。
13. enable_dl:设置是否允许使用dl()函数在脚本运行时加载PHP扩展。dl()函数仅在将PHP作为apache模块安装时才有效,在除apache以外的多线程服务器上不能正确工作。禁用dl()函数主要是出于安全考虑,因为它可以绕过open_basedir指令的限制。在安全模式下始终禁用dl()函数,而不管此处如何设置。
配置示例:
enable_dl = Off
14. cgi.force_redirect:打开cgi强制重定向为以CGI方式运行的php提供了必要的安全保护,php默认打开了该参数。
配置示例:
cgi.force_redirect=1
注意:在IIS/OmniHTTPD/Xitami上则必须关闭它!
性能相关配置:
1. realpath_cache_size:指定PHP使用的realpath(规范化的绝对路径名)缓冲区大小。在PHP打开大量文件的系统上应当增大该值以提高性能。
配置示例:
realpath_cache_size=16k
注意:这个realpath_cache_size是每个Apache进程独占的,所以很耗内存,不能设置的太大。
2. realpath_cache_ttl:realpath缓冲区中信息的有效期(单位:秒)。对文件很少变动的系统,可以增大该值以提高性能。
配置示例:
realpath_cache_ttl=120
3. auto_globals_jit:是否仅在使用到$_SERVER和$_ENV变量时才创建(而不是在脚本一启动自动创建)。如果并未在脚本中使用这两个数组,打开该指令将会获得性能上的提升。要想该指令生效,必须关闭register_globals和register_long_arrays、register_argc_argv指令。
配置示例:
auto_globals_jit = On
错误信息相关配置:
1. log_errors:PHP错误报告日志功能开关。
配置示例:
log_errors = On // 打开PHP错误报告日志功能
2. error_log:PHP错误报告日志文件路径。
配置示例:
error_log = "D:\wamp\bin\Php7.0.9\php_errors.log"
3. error_reporting:设置PHP的报错级别。
报错级别参数列表:
E_ALL:所有的错误和警告(不包括 E_STRICT)
E_ERROR:致命性的运行时错误
E_WARNING:运行时警告(非致命性错误)
E_PARSE:编译时解析错误
E_NOTICE:运行时提醒(这些经常是你代码中的bug引起的,也可能是有意的行为造成的。)
E_STRICT:编码标准化警告,允许PHP建议如何修改代码以确保最佳的互操作性向前兼容性。
E_CORE_ERROR :PHP启动时初始化过程中的致命错误
E_CORE_WARNING:PHP启动时初始化过程中的警告(非致命性错)
E_COMPILE_ERROR:编译时致命性错
E_COMPILE_WARNING:编译时警告(非致命性错)
E_USER_ERROR:用户自定义的错误消息
E_USER_WARNING:用户自定义的警告消息
E_USER_NOTICE:用户自定义的提醒消息
注意:错误报告是位字段,可以将数字加起来得到想要的错误报告等级。
配置示例:
Error_reporting = E_ALL & ~E_NOTICE // 除提示外,显示所有错误
4. display_errors:设定PHP是否将任何错误信息包含在返回给Web服务器的数据流中。
配置示例:
display_errors = On
(PHP将任何由error_reporting所定义的错误信息作为错误数据流返回给Web服务器)
5. display_startup_errors :是否打印php启动时产生的错误。
配置示例:
display_startup_errors = Off
6. html_errors:是否在出错信息中使用HTML标记。如果打开了html_errors指令,PHP将会在出错信息上显示超链接,直接链接到一个说明或者导致这个错误的函数的页面。你可以在网上下载php手册,并将docref_root指令指向你本地的手册所在的URL目录中,你还必须设置docref_ext指令来指定文件的扩展名。
注意:不要在发布的站点上使用这个特性。
配置示例:
html_errors = On
docref_root = "http://localhost/phpmanual/"
docref_ext = ".html"
7. track_errors:保存最近一个错误/警告消息于变量$php_errormsg中。$php_errormsg这个变量只在错误发生的作用域内可用,并且要求track_errors是开启的。
配置示例:
track_errors = On
8. log_errors_max_len:设置错误日志文件中每条错误消息的最大长度。
配置示例:
log_errors_max_len=1024
9. ignore_repeated_errors:是否忽略重复的错误信息。如果关闭这个参数,错误信息必须出现在同一个文件的同一行才会被忽略。
配置示例:
ignore_repeated_errors=Off
10. ignore_repeated_source:忽略重复消息时,也忽略消息的来源,重复信息将不会记录它是由不同的文件还是不同的源代码产生的。
配置示例:
ignore_repeated_source=Off
11. report_memleaks:设置是否报告内存泄露信息。这个参数只在调试编译中起作用,并且必须在error_reporting中包含E_WARNING。
配置示例:
report_memleaks=On
12. error_prepend_string:错误信息之前输出的内容。
配置示例:
error_prepend_string = "<span style='color: #ff0000'>"
13. error_append_string:错误信息之后输出的内容。
配置示例:
error_append_string = "</span>"
资源限制相关配置:
1. max_execution_time:设定任何脚本所能够运行的最长时间,默认值是30秒。
配置示例:
max_execution_time = 30
2. memory_limit:PHP进程能够占用的内存,单位是M,默认值是128M。
配置示例:
memory_limit = 128M
3. max_input_nesting_level:设置输入变量的嵌套深度(例如$_GET、$_POST、$_COOKIE等)。
配置示例:
max_input_nesting_level=64
4. max_input_vars:设置输入变量的最大数量(限制分别应用于$_GET、$_POST、$_COOKIE)。
配置示例:
max_input_vars=1000
5. max_input_time:设置每个脚本接收POST、GET及PUT等方式输入数据的最大时间限制。
配置示例:
max_input_time = 60
6. default_socket_timeout:设置socket超时时间。Socket流从创建到传输再到关闭整个过程必须要在这个参数设置的时间内完成,如果不能完成,PHP将会自动结束这个socket并返回一个警告。例如:使用file_get_contents()函数获取文件内容的时间会受到限制。
配置示例:
default_socket_timeout=60
7. pcre.backtrack_limit:PCRE的最大回溯步数限制。该参数影响非贪婪模式的正则匹配。
配置示例:
pcre.backtrack_limit=100000
注意:如果将这个值设置为一个很大的数字,可能会消耗掉所有的进程可用栈,最终导致php崩溃。
8. pcre.recursion_limit:PCRE的最大递归深度限制。
配置示例:
pcre.recursion_limit=100000
实际项目应用中,最好也对内存进行限定设置memory_limit,这样比较稳妥。
9. post_max_size:POST方法提交数据的最大大小限制。
配置示例:
post_max_size = 8M
(若PHP程序需要上传大型数据例如照片和视频文件,则应提高upload_max_filesize和post_max_size的值)
数据处理相关配置:
1. allow_calltime_pass_reference:是否强制所有参数在函数调用时都按引用传递,不推荐。建议在函数定义中指定每个参数在函数调用时的传递方式,传值或传引用。
配置示例:
allow_calltime_pass_reference = Off
2. register_argc_argv:是否声明$argv和$argc变量。命令行运行PHP脚本格式:php php脚本路径 参数1 参数2 参数3 ... 参数n。$argv是一个数组,存储命令行参数,其中第一个元素是脚本文件路径名称。$argc保存$argv数组元素的个数。若不想使用这两个变量,应当关闭它以提高性能。
配置示例:
register_argc_argv = Off
3. request_order:设置超全局变量$_REQUEST的值。默认值为“GP”,只包含$_GET和$_POST而不包括$_COOKIE。G,P,C的先后顺序就是设置的array的覆盖顺序(后者覆盖前者)。
配置示例:
request_order = "GP"
4. variables_order:设置PHP变量解析顺序,包括$_GET,$_POST,$_COOKIE,$_ENV ,$_SERVER 数组,解析顺序从左到右,后解析新值覆盖旧值。默认设定为EGPCS(Environment,GET,POST,Cookie,Server)。
配置示例:
variables_order = "GPCS"
5. arg_separator.output:设置PHP所产生的URL中来分隔参数的分隔符,默认是“&”。
配置示例:
arg_separator.output = "&"
PHP产生URL的函数:http_build_query
6. arg_separator.input:PHP解析URL中的变量时使用的分隔符列表,默认是“&”。
配置示例:
arg_separator.input = ";&"(字符串中的任何字符都将被看成分隔符)
7. auto_prepend_file和auto_append_file:分别指定在主文件之前和之后自动解析的文件名。这些文件就像调用了include()函数被包含进来一样,因此会使用include_path指令的值。
注意:如果脚本通过exit()终止,那么自动后缀将不会发生。
8. default_mimetype和default_charset:分别设置PHP文档的MIME类型和字符集的编码
方式。这两个信息会在数据包头部字段“Content-Type”中输出。
配置示例:
default_mimetype = "text/html"
default_charset = "UTF-8"
文件上传相关配置:
1. file_uploads:是否允许HTTP文件上传。
配置示例:
file_uploads=On
2. max_file_uploads:一个请求允许上传的最大文件数量限制。
配置示例:
max_file_uploads=20
3. upload_tmp_dir:文件上传时存放文件的临时目录(必须是PHP进程用户可写的目录)。
配置示例:
upload_tmp_dir = "D:/wamp/phpfileuploadtmp"
4. upload_max_filesize:上传文件的最大大小限制。
配置示例:
upload_max_filesize = 2M
Session相关配置:
1. session.save_path:设置session文件存放的位置(文件夹应该是已经存在的)。
配置示例:
session.save_path = "D:/wamp/phpsessiontmp"
为了保证服务器的安全,最好设置为外网无法访问的目录。
2. session.save_handler:设置session数据的存取方式。默认以文件方式存取。
配置示例:
session.save_handler = files // 文件方式
session.save_handler = user // 数据库方式
3. session.use_cookies:是否使用cookies在客户端保存会话sessionid,默认为采用cookies。
配置示例:
session.use_cookies = 1
4. session.use_only_cookies:是否仅仅使用cookie在客户端保存会话sessionid,这个选项可以使管理员禁止用户通过URL来传递sessionid,默认为0,如果禁用的话,客户端如果禁用cookie将使session无法工作。
配置示例:
session.use_only_cookies = 1
5. session.name:设置session名称。
配置示例:
session.name = PHPSESSID
6. session.auto_start:是否自动启动session,默认不启动。若不自动启动,每个PHP脚本头部都需要通过session_start()函数来启动session。
配置示例:
session.auto_start = 0
7. session.cookie_lifetime:传递sessionid的cookie有效期,0表示仅在浏览器打开期间有效。
配置示例:
session.cookie_lifetime = 0
8. session.gc_probability和session.gc_divisor:定义每次初始化会话时,启动垃圾回收程序的概率。计算公式:session.gc_probability / session.gc_divisor。对会话页面访问越频繁,概率就应当越小。
配置示例:
session.gc_probability = 1
session.gc_divisor = 1000
9. session.gc_maxlifetime:设定保存的session文件生存期,超过此参数设定秒数后,保存的数据将被视为’垃圾’并由垃圾回收程序清理。如果你在session.save_path选项中设定使用子目录来存储session数据文件,垃圾回收程序不会自动启动,你必须使用自己编写的shell脚本、cron项或者其他办法来执行垃圾搜集。
配置示例:
session.gc_maxlifetime = 1440
10. session.use_trans_sid:设置当客户端禁用Cookie时,是否将sessionid以参数的形式自动附加到URL末尾。
配置示例:
session.use_trans_sid = 1
(注意:要配合session.use_only_cookies=0配置使用,否则无效)
11. session.bug_compat_42和session.bug_compat_warn:PHP4.2之前的版本有一个未注明的"特性"(也可看作bug):即使在"register_globals = Off"的情况下也允许初始化全局session变量,在4.2.3以后, 为了兼容以前的模式, PHP引入了bug_compat_42, 当启用这个选项以后(默认启用), PHP将容许自动将SESSION中的变量做为全局变量使用. 只不过如果bug_compat_warn选项开启的情况下, 会报告这个特性的被使用.
配置示例:
session.bug_compat_42 = On
session.bug_compat_warn = On
12. session.hash_bits_per_character:指定在session_id字符串中的每个字符内保存多少位二进制数,这些二进制数是hash函数的运算结果。影响session id的长度,该值减小时session id长度增大。
配置示例:
session.hash_bits_per_character = 5
13. url_rewriter.tags:指定重写哪些HTML标签来包含session_id。(仅在"session.use_trans_sid"打开的情况下有效)form和fieldset比较特殊,如果你包含他们,URL重写器将添加一个隐藏的"<input>",它包含了本应当额外追加到URL上的信息。如果你想兼容XHTML标准,请使用"fieldset"代替"form"。
注意:所有合法的项都需要一个等号——即使后面没有值。
配置示例:
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
其他配置:
1. extension_dir:存放扩展库(模块)的目录,也就是PHP用来寻找动态连接扩展库的目录。PHP扩展库文件都存放在PHP安装目录下的ext目录下。
配置示例:
extension_dir = "D:\wamp\bin\Php7.0.9\ext"
2. extension:对于每个需要激活的扩展,都需要一行相应的“extension=”语句来说明PHP启动时需要加载哪些扩展。
配置示例:
配置一个文件名:
extension=php_mysqli.dll
或者配置一个路径:
extension="D:\wamp\bin\Php7.0.9\ext\php_mysqli.dll"
(如果只是配置文件名,PHP会在extension_dir配置的目录下查找)
3. date.timezone:设置时区。该设置影响PHP中所有的日期、时间函数。
配置示例:
date.timezone = Asia/Shanghai
4. doc_root:PHP页面在服务器上的根目录。
配置示例:
doc_root = "D:\wamp\www"
5. magic_quotes_gpc:PHP根据其配置决定是否将对所有GPC参数($_GET,$_POST,$_COOKIE)进行addslashes处理[既转义单引号、双引号、反斜线和nullbyte]
配置示例:
magic_quotes_gpc = On
将magic_quotes_gpc设置为On时存在性能损耗。
6. expose_php:是否隐藏PHP版本信息。
配置示例:
expose_php = Off
若将该配置项开启,服务器发出的http包头部都会包含PHP的版本信息,如:X-Powered-By:PHP/7.0.9,若关闭则不会出现。
7. user_ini.filename和user_ini.cache_ttl:user_ini.filename设置用户可以自定义的php.ini文件的名称;读取文件后会缓存起来,user_ini.cache_ttl设置重新读取的时间间隔。
配置示例:
user_ini.filename = ".user.ini"
user_ini.cache_ttl = 300
8. include_path:指定一组目录用于require(),include(),fopen_with_path()函数寻找文件。目录之间Unix下用冒号分隔,Windows用分号分隔。
配置示例:
Unix:include_path=".:/php/includes"
Windows:include_path=".;c:\php\includes"
9. sys_temp_dir:PHP用于存放临时文件的目录。
配置示例:
sys_temp_dir = "C:\Windows\TEMP"
10. cgi.nph:如果该参数打开,那么它会强制cgi对每个http请求始终发送状态码200.
配置示例:
cgi.nph=1
11. SMTP:mail()函数中用来发送邮件的SMTP服务器的主机名或IP地址,仅用于win32.
配置示例:
SMTP=localhost
12. smtp_port:SMTP服务器的端口号,仅用于win32.
配置示例:
smtp_port=25
13. sendmail_from:发送邮件时使用的“From:”头中的邮件地址,仅用于win32。
配置示例:
sendmail_from = me@example.com
14. cgi.force_redirect:这是个在许多Web服务器中都需要被激活的目录安全功能,不设置时服务器默认开启。但是在IIS服务器中一定要把这个功能关闭,否则会导致PHP引擎在Windows中出错。
配置示例:
cgi.force_redirect = 1 // 1开启,0关闭
15. cgi.fix_pathinfo:此指令可以允许PHP遵从CGI规则访问真实路径信息。IIS的FastCGI实现需要激活此指令。
配置示例:
cgi.fix_pathinfo = 1
16. Fastcgi.impersonate: IIS 下的 FastCGI 支持模拟呼叫用户方安全令牌的能力。这使得IIS可以定义请求方的安全上下文。
配置示例:
Fastcgi.impersonate = 1
17. Fastcgi.logging:FastCGI 日志在 IIS 下应被关闭。如果激活,则任何类的任何消息都被FastCGI 视为错误条件从而导致 IIS 产生 HTTP 500 错误。
配置示例:
Fastcgi.logging:FastCGI = 0