PHP-FPM 无法覆盖 error_reporting?
PHP-FPM unable to override error_reporting?
在过去的几个小时里,我遇到了一个让我发疯的问题:我无法在我的开发机器上覆盖 error_reporting
指令的默认值 (Debian 8 + php-fpm 5.6.29 + Nginx/1.6.2)
我正在使用的 php 个软件包:
$ dpkg --get-selections | grep php
libapache2-mod-php5 install
php-console-table install
php5 install
php5-cli install
php5-common install
php5-curl install
php5-fpm install
php5-gd install
php5-intl install
php5-json install
php5-mcrypt install
php5-mysql install
php5-readline install
php5-xmlrpc install
php5-xsl install
考虑以下极其简单的脚本:
<?php
$initial_value = error_reporting(); // Just read the current value
error_reporting(E_PARSE); // Lets set it to something else.
$update_value = error_reporting(); // Read again.
printf(
"Initial value: %s\nFinal value: %s",
$initial_value,
$update_value
);
如果我从 cli 运行 它,它有效:
$ php test.php
// output: Initial value: 22527 Final value: 4
但是如果我在 php5-fpm 下 运行 这个,输出是:
Initial value: 32767 Final value: 32767
我尝试过的:
- 在
php.ini
中设置值(并检查 phpinfo();
中列出的所有 php.ini 的文件,以防万一)但什么也没有。
- 我没有使用
.user.ini
字段(已检查两次)
error_reporting(E_PARSE)
和 ini_set('error_reporting', E_PARSE);
都试过了。这些指令应该覆盖 ini 文件,对吗?
当然,在每次编辑 ini 文件后,我都会重新启动 php5-fpm 进程(也尝试停止然后启动而不是 restart/reload)
一个奇怪的事情是 我实际上可以覆盖其他参数(例如,display_errors
,既可以从 ini 文件也可以从 ini_set
调用)。
那么,到目前为止我还缺少什么?
这闻起来像 php_admin_value
。检查您的 fpm/php.ini
或 fpm/pool.d/*
或 fpm/conf.d/*
是否:
php_admin_value[error_reporting] = E_ALL
它是不可覆盖的,并且产生与您描述的相同的输出。也可以从 nginx 配置中设置,检查:
fastcgi_param PHP_ADMIN_VALUE ...
在过去的几个小时里,我遇到了一个让我发疯的问题:我无法在我的开发机器上覆盖 error_reporting
指令的默认值 (Debian 8 + php-fpm 5.6.29 + Nginx/1.6.2)
我正在使用的 php 个软件包:
$ dpkg --get-selections | grep php
libapache2-mod-php5 install
php-console-table install
php5 install
php5-cli install
php5-common install
php5-curl install
php5-fpm install
php5-gd install
php5-intl install
php5-json install
php5-mcrypt install
php5-mysql install
php5-readline install
php5-xmlrpc install
php5-xsl install
考虑以下极其简单的脚本:
<?php
$initial_value = error_reporting(); // Just read the current value
error_reporting(E_PARSE); // Lets set it to something else.
$update_value = error_reporting(); // Read again.
printf(
"Initial value: %s\nFinal value: %s",
$initial_value,
$update_value
);
如果我从 cli 运行 它,它有效:
$ php test.php
// output: Initial value: 22527 Final value: 4
但是如果我在 php5-fpm 下 运行 这个,输出是:
Initial value: 32767 Final value: 32767
我尝试过的:
- 在
php.ini
中设置值(并检查phpinfo();
中列出的所有 php.ini 的文件,以防万一)但什么也没有。 - 我没有使用
.user.ini
字段(已检查两次) error_reporting(E_PARSE)
和ini_set('error_reporting', E_PARSE);
都试过了。这些指令应该覆盖 ini 文件,对吗?
当然,在每次编辑 ini 文件后,我都会重新启动 php5-fpm 进程(也尝试停止然后启动而不是 restart/reload)
一个奇怪的事情是 我实际上可以覆盖其他参数(例如,display_errors
,既可以从 ini 文件也可以从 ini_set
调用)。
那么,到目前为止我还缺少什么?
这闻起来像 php_admin_value
。检查您的 fpm/php.ini
或 fpm/pool.d/*
或 fpm/conf.d/*
是否:
php_admin_value[error_reporting] = E_ALL
它是不可覆盖的,并且产生与您描述的相同的输出。也可以从 nginx 配置中设置,检查:
fastcgi_param PHP_ADMIN_VALUE ...