如何让 PHP 显示错误而不是给我 500 Internal Server Error [重复]

Posted

技术标签:

【中文标题】如何让 PHP 显示错误而不是给我 500 Internal Server Error [重复]【英文标题】:How can I make PHP display the error instead of giving me 500 Internal Server Error [duplicate] 【发布时间】:2021-10-07 07:06:47 【问题描述】:

这在以前从未发生过。通常它会显示错误,但现在它只给我一个 500 内部服务器错误。当然之前,当它显示错误时,它是不同的服务器。现在我在一个新服务器上(我有完整的 root,所以如果我需要在 php.ini 中的某个地方配置它,我可以。)或者它可能与 Apache 相关?

我已经忍受了,只是将文件传输到我的另一台服务器并在那里运行它以查找错误,但这变得太乏味了。有没有办法解决这个问题?

【问题讨论】:

这听起来像是 apache 问题,而不是 PHP 问题。 Apache 会在遇到配置问题时抛出 500(例如 .htaccess 中的语法错误)。检查您的 apache 错误日志以获取错误消息。 【参考方案1】:

检查php.ini 文件中的error_reportingdisplay_errorsdisplay_startup_errors 设置。它们应该分别设置为E_ALL"On"(尽管你不应该在生产服务器上使用display_errors,所以禁用它并在部署它时使用log_errors 代替)。您还可以在脚本的最开始更改这些设置(display_startup_errors 除外)以在运行时设置它们(尽管您可能无法通过这种方式捕获所有错误):

error_reporting(E_ALL);
ini_set('display_errors', 'On');

之后,重启服务器。

【讨论】:

我们如何关闭 display_errors,让 PHP 显示 200 或 404 而不是 500? 不确定是否是在 2010 年,但是,您不需要在 2014 年重新启动服务器(除非使用像 APC 这样的操作码缓存)。 即使做了所有这些我仍然得到 500 错误......也许它来自 IIS? Linux 环境中的错误权限有时也会导致 500 错误。只是作为一个提醒。 如果无法修改php.ini,可以添加.htaccess文件php_flag display_errors 1【参考方案2】:

从命令行使用php -l <filename>(即'L')输出可能导致PHP 抛出状态500 错误的语法错误。它会输出如下内容:

PHP Parse error: syntax error, unexpected '' in <filename> on line 18

【讨论】:

这真的帮了我大忙!跟踪我的错误日志没有产生任何结果,但是这个 gem 运行良好,并显示了我的语法错误和行号。正在调试一个类文件。谢谢! 这是真正的答案,对我们这些懒惰的人来说又快又容易:P 在 Windows 上我安装了 Xammp,所以我可以在我的机器上安装 php.exe 来执行此操作【参考方案3】:

值得注意的是,如果您的错误是由 .htaccess 引起的,例如缺少 rewrite_module,您仍然会看到 500 内部服务器错误。

【讨论】:

我实际上错过了 apache 上的一个模块。我通过查看错误日志得到了这一点(ubuntu 的默认值是 /var/log/apache2/error.log)【参考方案4】:

仔细检查是否

display_errors

error_reporting

在 ini 文件的其他地方处于活动状态(不是注释)。

我的开发服务器在升级到之后拒绝显示错误 Kubuntu 16.04 - 我已经检查了很多次 php.ini ......原来有一个 diplay_errors = off;在我的下面大约 100 行

display_errors = on;

所以记住最后一个很重要!

【讨论】:

【参考方案5】:

尽量不要去

MAMP > conf > [your PHP version] > php.ini

但是

MAMP > bin > php > [your PHP version] > conf > php.ini

在那里改变它,它对我有用......

【讨论】:

【参考方案6】:

从 PHP 代码中启用错误显示对我来说不起作用。在我的例子中,使用 nginx 和 PHP-FMP,我使用 grep 跟踪日志文件。例如,我知道文件名 mycode.php 会导致错误 500,但不知道是哪一行。从控制台,我使用这个:

/var/log/php-fpm# cat www-error.log | grep mycode.php

我有输出:

[04-Apr-2016 06:58:27] PHP Parse error:  syntax error, unexpected ';' in /var/www/html/system/mycode.php on line 1458

这有助于我找到有错字的那一行。

【讨论】:

【参考方案7】:

如果所有其他方法都失败,请尝试将所有文​​件和目录“移走”(即在 bash 中)并将它们一一添加。

我刚刚发现我的 .htaccess 文件引用了一个不存在的 .htpasswd 文件。 (#傻)

【讨论】:

以上是关于如何让 PHP 显示错误而不是给我 500 Internal Server Error [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu PHP5/Apache2 - 显示 500 错误而不是错误消息

我希望 codeigniter 回显 php 错误而不是 500 内部错误

修改.htaccess以使用php7.2而不是php5.6后出现500错误[重复]

IIS7下,显示PHP错误(不显示500错误,而显示详细错误)

PHP开启错误提示而不是单单返回500

遇到致命异常时如何让 php 返回 500?