Rootop 服务器运维与web架构

php配置参数生效范围

php.ini 配置选项列表
https://www.php.net/manual/zh/ini.list.php

列表中有一列为 “可修改范围”,这个范围就是指可以在

1、php.ini中配置
2、代码中通过ini_set()配置
3、httpd.conf 或 .htaccess
4、.user.ini

这些配置中进行修改。

范围参考:https://www.php.net/manual/zh/configuration.changes.modes.php

# 为每个项目单独创建一个 .user.ini ,然后单独配置错误日志路径
# .user.ini作用

在PHP_INI_USER的配置项中,提到.user.ini。
这里作用解释如下:
除了主 php.ini 之外,PHP 还会在每个目录下扫描 INI 文件,从被执行的 PHP 文件所在目录开始一直上升到 web 根目录($_SERVER['DOCUMENT_ROOT'] 所指定的)。
如果被执行的 PHP 文件在 web 根目录之外,则只扫描该目录。
.user.ini 是PHP 支持基于每个目录的 INI 文件配置。如果你的 PHP 以模块化运行在 Apache 里,则用 .htaccess 文件有同样效果。
这里就很清楚了,.user.ini 实际上就是一个可以由用户 "自定义"的php.ini,我们能够自定义的设置是模式为"PHP_INI_PERDIR 、 PHP_INI_USER"的设置。(上面表格中没有提到的PHP_INI_PERDIR也可以在.user.ini中设置) 
而且,和php.ini不同的是,.user.ini是一个能被动态加载的ini文件。也就是说我修改了.user.ini后,不需要重启服务器中间件,只需要等待user_ini.cache_ttl所设置的时间(默认为300秒),即可被重新加载。
这里的意思就是说我们在.user.ini中设置php.ini中PHP_INI_PERDIR 和 PHP_INI_USER 模式的 INI 设置,只要是使用CGI/FastCGI模式的服务器都可以使用.user.in
原文链接:https://blog.csdn.net/weixin_53146913/article/details/124840296

# 注意注释掉 pool 配置文件中下面2行,否则 .user.ini 中的会失效。

cat /etc/php-fpm.d/www.conf| grep error

;php_admin_value[error_log] = /var/log/php-fpm/www-error.log
;php_admin_flag[log_errors] = on

# 自定义ini文件

cat /data/html/web1/.user.ini 

error_log = /var/log/php-fpm/web1-error.log
log_errors = on
display_errors = off

例如 error_log 的”可修改范围”值为 PHP_INI_ALL ,所以可以通过 .user.ini 实现为项目单独一个错误日志。

# 在www.conf中会有一个关于慢日志的配置,这个无法通过.user.ini独立,因为它属于php-fpm配置,需要多个pool。

slowlog = /var/log/php-fpm/www-slow.log
request_slowlog_timeout = 3

如果想把php的慢日志也独立,需要多个pool来区分。

# 通过php-fpm中的配置修改php.ini配置

php_value/php_flag
php_admin_value/php_admin_flag

# 下面2个配置会被ini_set覆盖

php_value name value
设置指定的值. 只适合于 PHP_INI_ALL 和 PHP_INI_PERDIR 范围类型指令. 清除之前设置的值使用 none 标记. Note: 不要使用 php_value 设定布尔值和php_flag (见下文) .
php_flag name on|off、1|0、true|false、yes|no
用于设置一个布尔配置指令, 只适合于 PHP_INI_ALL 和 PHP_INI_PERDIR 类型指令(和上面的不同就是 php_value 用于设置值(如字符串),而这只能设置 on|off、1|0、true|false、yes|no)

# 下面2个配置不会被ini_set覆盖

php_admin_value name value
功能和php_value一样,但这个不能用在 .htaccess 文件里, 只能在conf(包括virtualhost)文件里引用
php_admin_flag name on|off、1|0、true|false、yes|no
同上
(1)php-fpm.conf(或者其他conf文件)中的配置优先级高于php.ini,即在php服务运行时,php-fpm的配置会覆盖php.ini中的相同的配置。
	 但是: disable_functions 或者 disable_classes 在 php.ini 之中定义的值不会被覆盖掉,但是会将新的设置附加在原有值的后面。
(2)php-fpm.conf(或者其他conf文件)中使用 php_admin_value 或者 php_admin_flag 定义的值,不能被 PHP 代码中的 ini_set() 覆盖。
(3)ini_set() 可以修改php.ini定义好的配置,如运行内存限制值

即在大部分配置上,优先级是:php-fpm.conf > ini_set() > php.ini

如php运行内存限制,假设在php.ini中设置memory_limit = 256M,而在php-fpm配置中设置php_admin_value[memory_limit] = 64M,那么phpinfo()显示的内存限制会是64M,256M的配置是没有生效的。

更新php.ini或者php-fpm.conf后要重启相应服务。
PS:phpinfo()得到的配置信息,就是当前服务的信息。

原创文章,转载请注明。本文链接地址: https://www.rootop.org/pages/5377.html

作者:Venus

服务器运维与性能优化

评论已关闭。