【问题标题】:PHP does not return errors at allPHP 根本不返回错误
【发布时间】:2011-01-28 04:41:01
【问题描述】:

我正在运行 PHP 和 nginx,并使用 php.ini 的生产版本。所以变量 display_error 设置为 Off ,我有一个很好的理由想要这样。但是对于某些文件,我需要启用错误报告。我使用 ini_set 打开错误报告。但是一个简单的代码 sn-p 像:

<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);

echo "hi"errorrrrr
?>

不跟踪错误。它只是返回一个 HTTP 500 内部服务器错误消息。我应该怎么做才能启用错误报告?

【问题讨论】:

标签: php error-reporting ini-set


【解决方案1】:

您应该能够使用log_errors 将所有错误记录到文件中。您甚至可以使用 error_log 将错误写入特定文件,如果这会让您的生活更轻松。

【讨论】:

  • 这也行不通!奇怪的。我正在使用:ini_set("error_log", "/home/me/log.log"); ini_set("log_errors", true);是的,日志文件可由网络服务器进程写入。
  • 嗯...你有什么理由不直接在 php.ini 中启用 log_errors 吗?它不会对用户可见,但会记录整个网站的任何问题。
  • 哦,是的,我能做到。谢谢。
  • 但是,为什么这首先不起作用?有什么想法吗?
  • 首先它不起作用的原因是,由于您的文件中存在语法错误,PHP 根本不解析它。因此,它不执行log_errors 调用,必须依赖php.ini 中的设置。
【解决方案2】:

当然如果发生语法错误,PHP 将不会执行这些指令。因为这个脚本甚至还没有开始执行!因为它在解析阶段失败。

您必须使用另一种方式来设置这些指令,尽管这可能很棘手。看起来你的 PHP 作为 CGI 运行,而不是 apache 模块,所以,设置 ini 指令的唯一方法是编辑 php.ini 本身。

为了确定,请运行 phpinfo(); 并查看它对 Server API 的描述。

无论如何,每次看到 500 错误时,您都必须检查 apache 的 error_log,以确定发生了什么。

【讨论】:

    【解决方案3】:

    尝试在 .htaccess 文件中设置 ini 设置。

    如果你把它们放在一个由于语法错误而没有被编译的 PHP 文件中,这些设置将不会生效。

    【讨论】:

      【解决方案4】:

      如果您根本无法更改 php 的配置,那么您可以使用一个技巧。创建一个新文件,其中包含包含错误的文件。在执行包含之前,请设置所需的配置。

      例子

      error_reporting(E_ALL);
      ini_set("display_errors", 1);
      include 'some other file with a parse error.php';
      

      然后只执行包装脚本。这是有效的,因为在您的脚本最终因解析错误而死之前,将首先评估包含之前的语句。

      【讨论】:

        【解决方案5】:

        我正在寻找的答案在这个答案的 cmets 中:PHP does not return errors at all

        它不起作用的原因 首先是,因为有 文件中的语法错误,PHP 确实如此 根本不解析它。因此,它不 执行 log_errors 调用并具有 依赖 php.ini 中的设置。

        – cmptrgeekken 2010 年 3 月 16 日 18:16

        【讨论】:

          猜你喜欢
          • 2011-09-30
          • 1970-01-01
          • 1970-01-01
          • 2013-12-12
          • 2011-12-05
          • 2013-10-03
          • 1970-01-01
          • 2011-08-11
          • 2015-10-07
          相关资源
          最近更新 更多