4

在过去的几个小时里,我遇到了一个让我发疯的问题:我无法覆盖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(并检查所有 php.ini 中列出的文件phpinfo();,以防万一)但什么也没有。
  • 我没有使用.user.ini字段(检查了两次)
  • error_reporting(E_PARSE)用和都试过了ini_set('error_reporting', E_PARSE);。这些指令应该覆盖 ini 文件,对吧?

当然,在每次编辑 ini 文件后,我确实重新启动了 php5-fpm 进程(也尝试停止然后启动而不是重新启动/重新加载)

奇怪的是,我实际上可以覆盖其他参数display_errors例如,在 ini 文件和ini_set调用中都可以使用)。

那么,到目前为止我错过了什么?

4

1 回答 1

4

这闻起来像php_admin_value。检查您的fpm/php.inifpm/pool.d/*fpm/conf.d/*

php_admin_value[error_reporting] = E_ALL

它是不可覆盖的,并产生与您描述的相同的输出。也可以从 nginx 配置中设置,检查:

fastcgi_param PHP_ADMIN_VALUE ...
于 2017-03-09T16:57:04.977 回答