PHP FPM 返回所有 PHP 错误的 HTTP 500 [重复]

PHP FPM returns HTTP 500 for all PHP errors [duplicate]

提问人:ErJab 提问时间:2/9/2010 更新时间:9/11/2023 访问量:76202

问:

我正在使用 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 内部服务器错误。如何让 PHP 打印确切的错误而不是返回通用的 HTTP 500?error_reporting(-1);

php nginx 错误报告

评论

0赞 echo 2/9/2010
如果文件没有错误,您会得到正确的响应代码(HTTP 200 OK)吗?
0赞 ErJab 2/9/2010
是的,如果文件没有错误,我会得到 HTTP 200 OK。
1赞 umassthrower 7/2/2012
通常,记录错误比显示错误更好。

答:

44赞 Young 2/9/2010 #1

尝试在您的 :php.ini

 display_errors = Off

然后穿上它

评论

0赞 ErJab 2/9/2010
谢谢!我使用php.ini的生产版本,其中display_errors关闭。
1赞 Xeoncross 8/23/2011
我使用的是 PHP-Fastcgi 脚本,所以当我最近更改为 php-fpm 时。我没有注意到php.ini更改为 FPM 的版本。他们的版本有 dispaly_errors = 关闭,所以当发生错误时,我所有的页面都开始空白!
7赞 alioygur 4/25/2012
之后不要忘记重置php-fpm。(sudo 服务 php-fpm 重启)
1赞 srcspider 3/26/2013
另外,别忘了改成 ,如果你没有 php-fpm 作为服务来重新启动它,那就做error_levelE_ALLsudo /etc/init.d/php5-fpm restart
0赞 Rakib 2/26/2022
同时检查您的 PHP 版本和 fastcgi.conf 文件中提到的版本。
8赞 ErJab 3/15/2010 #2

为了发布更完整的答案,我使用了 php.ini 的生产版本,其中 display_errors = 关闭。我现在所做的不是全局打开它,而是对于我需要错误报告的文件,我在文件的开头使用。ini_set('display_errors', 'On');

评论

0赞 srcspider 3/26/2013
问题在于,根据文档,如果发生致命错误,它将无法正常工作。
0赞 Romeo Sierra 9/18/2017
@srcspider 不是真的吧?甚至指出致命的错误。您所要做的就是确保将其放在您正在考虑的范围的最顶端。ini_set('display_errors', 'On')
8赞 yaronli 3/25/2012 #3

我也遇到了这个问题,我开始了,但它不起作用。然后我找到了 in ,它将覆盖 的值,它可以工作。display_errors = Offphp.iniphp[display_errors]=offphp-fpm.confphp.ini

评论

1赞 Romeo Sierra 9/18/2017
php.ini与配置无关,如果您正在使用,则需要修改 .php-fpmphp-fpm.conf
1赞 Luis Ferro 8/22/2012 #4

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

如果打开了日志错误,则日志中仍将缺少错误,除非显示处于关闭状态,这不是预期的行为。

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

当前版本有一个错误,可以没收它。

评论

0赞 Sven 10/5/2012
你知道 php.net 中跟踪这个错误的错误票证吗?你能链接到它吗?
2赞 user2009092 1/25/2013 #5

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

php_flag[display_errors] = on

在php.ini文件中:

display_errors = On
0赞 Turan Zamanlı 10/13/2018 #6

如果您从 Remi 存储库 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 雷米 PHP7.2

3赞 Bách Nguyễn 4/9/2019 #7

你可以这样显示错误:去php.ini找到,你应该看到,只要替换成,重启PHP再运行。display_errorsdisplay_errors = OffOffOn

-1赞 Desh Deepak Dhobi 9/5/2023 #8

安装缺少的 php 模块对我有用。

sudo apt install php7.2-curl
sudo systemctl restart php7.2-fpm

这解决了我的 php 脚本的日志持久性 HTTP 错误 500。

因此,可以检查应用程序可能需要正常工作的任何缺少的 php 模块。

评论

0赞 Your Common Sense 9/11/2023
你正在颠倒过来。您必须首先检查日志,正如许多答案中已经建议的那样,获取实际的错误消息,然后才开始安装任何模块,修复配置错误或解决实际错误消息指示的任何其他问题