【问题标题】:PHP FPM returns HTTP 500 for all PHP errorsPHP FPM 为所有 PHP 错误返回 HTTP 500
【发布时间】:2011-01-14 16:29:42
【问题描述】:

我正在使用 PHP-FPM 运行 nginx。我用于处理 php 文件的 nginx 配置如下所示:

location  ~ \.php$ {
            set $php_root /home/me/www;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $php_root$fastcgi_script_name;
            include /etc/nginx/fastcgi_params;
        }

现在,我有一个像这样的简单 php 文件:

<?php
     ech "asd"
     asd""
?>

是的,有一个明显的错误。当我尝试访问 php 文件而不是跟踪语法错误时,我总是得到一个 HTTP 500 内部服务器错误。我尝试使用 error_reporting(-1); 但它仍然总是返回 HTTP 500。我如何让 PHP 打印确切的错误返回一个通用的 HTTP 500?

【问题讨论】:

  • 如果文件没有错误,你会得到正确的响应码(HTTP 200 OK)吗?
  • 是的,如果文件没有错误,我会收到 HTTP 200 OK。
  • 记录错误通常比显示错误更好。

标签: php nginx error-reporting


【解决方案1】:

尝试在您的php.ini 中找到以下行:

 display_errors = Off

那就去吧

【讨论】:

  • 谢谢!我使用的是 php.ini 的生产版本,其中 display_errors 为 Off。
  • 我使用的是 PHP-Fastcgi 脚本,所以当我最近更改为 php-fpm 时。我没有注意到 php.ini 更改为 FPM 的版本。他们的版本有 dispaly_errors = Off 所以当错误发生时我的所有页面都开始空白!
  • 之后不要忘记重置 php-fpm。 (sudo service php-fpm restart)
  • 另外不要忘记将error_level 更改为E_ALL,如果您没有 php-fpm 作为服务来重新启动它,只需执行sudo /etc/init.d/php5-fpm restart
【解决方案2】:

为了发布更完整的答案,我使用了具有 display_errors = Off 的生产版本的 php.ini。我现在没有全局打开它,而是针对需要报告错误的文件,在文件开头使用ini_set('display_errors', 'On');

【讨论】:

  • 问题在于,根据文档,如果发生致命错误,它将无法工作。
  • @srcspider 不是吗?甚至会指出致命错误。您所要做的就是确保将 ini_set('display_errors', 'On') 放在您正在考虑的范围的最顶端。
【解决方案3】:

我也遇到了这个问题,我在php.ini 中设置了display_errors = Off,但它不起作用。然后我在php-fpm.conf中找到了php[display_errors]=off,它会覆盖php.ini的值,就可以了。

【讨论】:

  • php.ini与配置无关,如果您使用php-fpm,则需要修改php-fpm.conf
【解决方案4】:

显示错误只会影响错误是否打印到输出。

如果您打开了日志错误,除非显示关闭,否则日志中仍然会丢失错误,这不是预期的行为。

预期的行为是,如果日志打开,则会在那里发现错误。如果显示打开,则会在屏幕/输出上发现错误。如果两者都出现错误,则会在两者上找到。

当前版本有一个错误会导致该错误。

【讨论】:

  • 你知道 php.net 中有一个 bug 票可以跟踪这个 bug 吗?可以链接吗?
【解决方案5】:

对于 Ubuntu 12.10,在 php-fpm-pool-config 文件中:

php_flag[display_errors] = on

在 php.ini 文件中:

display_errors = On

【讨论】:

    【解决方案6】:

    如果您从 Remi repo php72 安装。它带有apache的默认用户和组|

    转到您的 www.conf 文件,它位于 /etc/opt/remi/php72/php-fpm.d/www.conf

    改变

    user=nginx
    group=nginx
    

    在重启你的 php fpm 之前

    systemctl restart php72-php-fpm
    

    CENTOS REMI PHP7.2

    【讨论】:

      【解决方案7】:

      你可以这样显示错误:去php.ini找到display_errors,你应该看到display_errors = Off,把Off换成On,重启php再运行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-01
        • 2011-11-01
        • 2014-07-19
        • 2013-11-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多