php.ini 常用配置详解
配置项修改范围
PHP_INI_* 模式的定义
模式 | 含义 |
---|---|
PHP_INI_USER | 可在用户脚本(例如 ini_set())或 Windows 注册表)(自 PHP 5.3 起)以及 .user.ini 中设定 |
PHP_INI_PERDIR | 可在 php.ini,.htaccess 或 httpd.conf 中设定 |
PHP_INI_SYSTEM | 可在 php.ini 或 httpd.conf 中设定 |
PHP_INI_ALL | 可在任何地方设定 |
配置项
文件上传相关
File Uploads Configuration Options
名字 | 默认 | 可修改范围 | 描述 |
---|---|---|---|
file_uploads | “1” | PHP_INI_SYSTEM | 是否允许http上传文件 |
upload_tmp_dir | NULL | PHP_INI_SYSTEM | 上传文件时用于存储文件的临时目录。php运行用户可写,未设置则使用系统默认值。如果开启了openbase_dir |
upload_max_filesize | “2M” | PHP_INI_PERDIR | 上传文件的大小限制,值为整数时,则单位为字节数,支持 K,M,G速记符 |
max_file_uploads | 20 | PHP_INI_SYSTEM | 允许同时上载的最大文件数。 |
文件大小亦受限于
post_max_size
参数
受限于 nginx 设置的client_max_body_size
参数
数据处理
Data Handling Configuration Options
名字 | 默认 | 可修改范围 | 更新日志 |
---|---|---|---|
enable_post_data_reading | “1” | PHP_INI_PERDIR | 禁用此选项将导致不填充 $_POST 和 $_FILES。读取 postdata 的唯一方法就是使用 php://input stream wrapper。这对于代理请求或以高内存效率的方式处理 POST 数据非常有用。 |
post_max_size | “8M” | PHP_INI_PERDIR | 设置post传输数据最大值,此参数会影响文件上传,upload_max_size应小于该参数 |
default_mimetype | “text/html” | PHP_INI_ALL | Content-Type: text/html |
default_charset | “UTF-8” | PHP_INI_ALL | 该值影响多个函数的编码参数,htmlentities() , html_entity_decode() ,htmlspecialchars() ,iconv , mbstring 等 |
重要参数项
名字 | 默认 | 可修改范围 | 描述 |
---|---|---|---|
max_execution_time | “30” | PHP_INI_ALL | max_execution_time只影响脚本本身执行的时间。任何发生在诸如使用system()的系统调用,流操作,数据库操作等的脚本执行的最大时间不包括其中 |
memory_limit | “128M” | PHP_INI_ALL | 设置脚本允许分配的最大内存。支持整型,速记符,不限制内存则设置为 “-1” |
disable_functions | “” | 仅php.ini | 禁止某些函数;接受逗号分隔的函数名列表作为参数;只能禁止内置函数;无法禁止自定义函数;只能在php.ini中设置 |
disable_classes | “” | 仅php.ini | 禁用某些类;用逗号分隔类名;只能在php.ini中设置 |
expose_php | “1” | 仅php.ini | 是否在响应头中增加php版本信息 X-Powered-By: PHP/x.x.x 不建议开启 |
open_basedir | NULL | PHP_INI_ALL | 将 PHP 可以访问的文件限制到指定的目录,包括文件本身。此指令不受是否打开或关闭安全模式的影响。 |
user_ini.filename | .user.ini | 指定user_ini的文件名 | |
user_ini.cache_ttl | 300 | 间隔多久读取一次user_ini文件 | |
allow_url_fopen | On | PHP_INI_SYSTEM | 允许打开远程文件 |
allow_url_include | On | php.ini | 允许远程文件包含 include, include_once, require, require_once需要打开allow_url_fopen |
default_socket_timeout | “60” | PHP_INI_ALL | 基于 socket 的流的默认超时时间,fopen,file_get_contents等函数受此设置影响 |
output_buffering | “On” | PHP_INI_PERDIR | 该选项设置为 On 时,将在所有的脚本中使用输出控制。如果要限制输出缓冲区的最大值,可将该选项设定为指定的最大字节数(例如 output_buffering=4096,该选项在 PHP-CLI 下总是为 Off。可以简单理解为开启后,只有全部输出完毕才会发送到浏览器,ob_*系列函数可改变缓冲行为 |
日期相关
名字 | 默认 | 可修改范围 | 描述 |
---|---|---|---|
date.timezone | “” | PHP_INI_ALL | 设置时区, Asia/Shanghai |
异常错误相关设置
错误和日志记录配置选项
名字 | 默认 | 可修改范围 | 描述 |
---|---|---|---|
error_reporting | NULL | PHP_INI_ALL | 设置错误级别,生产环境建议设置 E_ALL & ~E_DEPRECATED & ~E_STRICT ,开发环境设置为E_ALL |
display_errors | “1” | PHP_INI_ALL | 是否将错误信息输出到显示屏幕,生产环境建议关闭。如果设置为stderr 则输出到stderr而不是strout |
display_startup_errors | “0” | PHP_INI_ALL | 显示php启动时的错误,生产环境建议关闭。 |
log_errors | “0” | PHP_INI_ALL | 设置是否将脚本运行的错误信息记录到服务器错误日志或者error_log之中。 |
error_log | NULL | PHP_INI_ALL | 设置脚本错误将被记录到的文件。该文件必须是web服务器用户可写的。如果特殊值 syslog 被设置,则将错误信息发送到系统日志记录器。 |
log_errors_max_len | “1024” | PHP_INI_ALL | 设置 log_errors 的最大字节数. 在 error_log 会添加有关错误源的信息。默认值为1024,如果设置为0表示不限长度。该长度设置对记录的错误,显示的错误,以及 $php_errormsg都会有限制作用。 |
ignore_repeated_errors | “0” | PHP_INI_ALL | 不记录重复的信息。重复的错误必须出现在同一个文件中的同一行代码上,除非 ignore_repeated_source 设置为true。 |
ignore_repeated_source | “0” | PHP_INI_ALL | 忽略重复消息时,也忽略消息的来源。当该设置开启时,重复信息将不会记录它是由不同的文件还是不同的源代码行产生的。 |
report_memleaks | “1” | PHP_INI_ALL | 如果这个参数设置为Off,则内存泄露信息不会显示 (在 stdout 或者日志中) |
track_errors | “0” | PHP_INI_ALL | 如果开启,最后的一个错误将永远存在于变量 $php_errormsg 中。 |
html_errors | “1” | PHP_INI_ALL | 在错误信息中关闭HTML标签。这种新的HTML格式的错误信息是可以点击,它引导用户前往描述该错误或者导致该错误发生的函数的参考信息页面。 这些参考与 docref_root 和 docref_ext 的设置有关。 |
xmlrpc_errors | “0” | PHP_INI_SYSTEM | 关闭正常的错误报告,并将错误的格式设置为XML-RPC错误信息的格式。 |
xmlrpc_error_number | “0” | PHP_INI_ALL | 用作 XML-RPC faultCode 元素的值。 |
docref_root | “” | PHP_INI_ALL | 新的错误信息格式包含了对应的参考页面,该页面对错误进行具体描述,或者描述了导致该错误发生的函数。为了提供手册的页面,你可以在PHP官方站点下载对应语言的手册,并在ini中设置网址到本地对应的地址。如果你的本地手册拷贝可以使用"/manual/" 访问,你就可以简单的设置 docref_root=/manual/。另外你还需要设置 docref_ext 匹配你本地文件的后缀名 docref_ext=.html。当然也可以设置一个外部的参考地址。例如你可以设置 docref_root=http://manual/en/ 或者 docref_root=“http://landonize.it/?how=url&theme=classic&filter=Landon &url=http%3A%2F%2Fwww.php.net%2F” |
docref_ext | “” | PHP_INI_ALL | docref_ext的值必须以 “.” 开头. |
error_prepend_string | NULL | PHP_INI_ALL | 错误信息之前输出的内容。 |
error_append_string | NULL | PHP_INI_ALL | 错误信息之后输出的内容。 |
脚本出现致命错误时,任何运行时设置都会无效
session配置项
会话配置选项
名字 | 默认 | 可修改范围 | 描述 |
---|---|---|---|
session.save_path | “” | PHP_INI_ALL | session.save_path 定义了传递给存储处理器的参数。如果选择了默认的 files 文件处理器,则此值是创建文件的路径。默认为 /tmp。 |
session.name | “PHPSESSID” | PHP_INI_ALL | 指定会话名以用做 cookie 的名字。只能由字母数字组成,默认为 PHPSESSID。 |
session.save_handler | “files” | PHP_INI_ALL | 定义了来存储和获取与会话关联的数据的处理器的名字。默认为 files。支持的值可通过php_info() 查看session模块 Registered save handlers |
session.auto_start | “0” | PHP_INI_PERDIR | 是否自动开启session |
session.gc_probability | “1” | PHP_INI_ALL | session.gc_probability/session.gc_divisor概率处理过期session文件 |
session.gc_divisor | “100” | PHP_INI_ALL | 每次启动生成新的session时,触发垃圾回收,清除概率为上面 |
session.gc_maxlifetime | “1440” | PHP_INI_ALL | 指定过了多少秒之后数据就会被视为“垃圾”并被清除。 |
session.serialize_handler | “php” | PHP_INI_ALL | 定义用来序列化/解序列化的处理器名字 |
session.cookie_lifetime | “0” | PHP_INI_ALL | 以秒数指定了发送到浏览器的 cookie 的生命周期。值为 0 表示“直到关闭浏览器”。默认为 0。 |
session.cookie_path | “/” | PHP_INI_ALL | 指定了要设定会话 cookie 的路径。默认为 /。 |
session.cookie_domain | “” | PHP_INI_ALL | 指定了要设定会话 cookie 的域名。默认为无,表示根据 cookie 规范产生 cookie 的主机名。 |
session.cookie_secure | “” | PHP_INI_ALL | 指定是否仅通过安全连接https发送 cookie。默认为 off |
session.cookie_httponly | “” | PHP_INI_ALL | 将 cookie 标记为只能通过 HTTP 协议访问。这意味着 cookie 不能被脚本语言访问,比如 JavaScript。此设置可以有效地帮助减少通过 XSS 攻击进行的身份盗窃(尽管并非所有浏览器都支持此设置)。 |
session.use_cookies | “1” | PHP_INI_ALL | 指定是否在客户端用 cookie 来存放会话 ID。默认为 1(启用)。 |
session.use_only_cookies | “1” | PHP_INI_ALL | 指定是否在客户端仅仅使用 cookie 来存放会话 ID。启用此设定可以防止有关通过 URL 传递会话 ID 的攻击。 |
如果设置
save_handler=redis
则sale_path设置如下session.save_path=tcp://ip:port?auth=passwrord
.user.ini 文件
自 PHP 5.3.0 起,PHP 支持基于每个目录的 .htaccess 风格的 INI 文件。此类文件仅被 CGI/FastCGI SAPI 处理。此功能使得 PECL 的 htscanner 扩展作废。如果使用 Apache,则用 .htaccess 文件有同样效果。
除了主 php.ini 之外,PHP 还会在每个目录下扫描 INI 文件,从被执行的 PHP 文件所在目录开始一直上升到 web 根目录($_SERVER['DOCUMENT_ROOT']
所指定的)。如果被执行的 PHP 文件在 web 根目录之外,则只扫描该目录。
在 .user.ini 风格的 INI 文件中只有具有 PHP_INI_PERDIR
和 PHP_INI_USER
模式的 INI 设置可被识别。
两个新的 INI 指令,user_ini.filename 和 user_ini.cache_ttl 控制着用户 INI 文件的使用。
user_ini.filename 设定了 PHP 会在每个目录下搜寻的文件名;如果设定为空字符串则 PHP 不会搜寻。默认值是 .user.ini。
user_ini.cache_ttl 控制着重新读取用户 INI 文件的间隔时间。默认是 300 秒(5 分钟)。