如何让 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_reporting
、display_errors
和display_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错误[重复]