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

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

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

【问题讨论】:

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

标签: apache php


【解决方案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 文件。 (#傻)

        【讨论】:

          猜你喜欢
          相关资源
          最近更新 更多