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文件
自PHP5.3.0起,PHP支持基于每个目录的.htaccess风格的INI文件。此类文件仅被CGI/FastCGISAPI处理。此功能使得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分钟)。
配置php.ini对PHP进行性能调优
用于生产环境中的PHP需要对其进行优化,让PHP自身发挥更好的性能,除了写好PHP代码,还要配置好php.ini。下面我们就从内存、文件上传、会话缓冲输出、真实路径缓存这几个方面讲解php.ini的配置调优。
内存
默认设置
memory_limit = 128M
单个进程可使用的内存最大值,这个值的设定可以从以下几点考虑:
应用的类型。如果是内存集中型应用,可增加该值;
单个PHP进程平均消耗的内存,该值可通过多次运行同一个脚本来计算平均值;
能负担多少个php-fpm进程;该值等于分配的总内存除以单个PHP进程平均消耗的内存
文件上传
默认设置
file_uploads = On
max_file_uploads = 20
upload_max_filesize = 2M
max_execution_time = 30 值 为 0 代表没有限制
设置max_file_uploads来决定同时允许多少个文件上传;
设置upload_max_filesize来决定每个文件上传的最大值;
如果是长时间任务,尽量使用队列来处理,因此,可适当缩短max_execution_time的值;
注意,Web服务器也可以设置文件上传大小及超时时间,不能仅仅以php.ini的设置为准;
会话
PHP的会话默认是保存在硬盘中
session.save_handler = files
在实际应用中,应当将会话保存在内存中。可使用Memcached或者Redis。这样做主要有两个好处:
提高速度;
有助于后期的扩展,如果会话数据存储在硬盘中,不便于增加额外的服务器,如果把会话数据存放在Memcached或Redis里,任何一台分布式PHP-FPM服务器都能访问会话数据。
可通过PECL安装memcached扩展并设置默认的save_handler为memcached
session.save_handler = 'memcached'
session.save_path = '127.0.0.1:11211'
缓冲输出
默认值
output_buffering=4096
在较少的片段中把内容传递给访问者的浏览器,能减少HTTP请求总数。因此,我们要让PHP缓冲输出,默认情况下,PHP已经启用了输出缓冲功能,PHP缓冲4096字节的输出之后才会把内容发送给Web服务器。
注:如果想要修改输出缓冲区的大小,确保使用的值是4(32位系统)或8(64位系统)的倍数。
真实路径缓存
默认值
realpath_cache_size = 4M
realpath_cache_ttl = 120
PHP会缓存应用使用的文件路径,这样每次包含或导入文件时就无需不断搜索包含路径了,这个缓存叫真实路径缓存(realpathcache),如果运行的是大型的PHP文件(如Composer组件),使用了大量文件,增加PHP真实路径缓存的大小能得到更好的性能。
总结:经过对php.ini的优化,这样后端的程序也会有所加快,对我们的网站还是非常利于帮助的,特别是需要做seo的网站,对性能这一块尤为重要。
版权声明:本文(即:原文链接:https://www.qin1qin.com/catagory/568/)内容由互联网用户自发投稿贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 630367839@qq.com 举报,一经查实,本站将立刻删除。