3

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

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

echo "hi"errorrrrr
?>

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

4

5 回答 5

1

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

于 2010-03-16T16:01:19.787 回答
1

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

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

可以肯定的是,请运行phpinfo();并查看它对 Server API 的说明。

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

于 2010-03-16T17:53:01.560 回答
1

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

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

于 2010-03-16T18:00:17.893 回答
1

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

例子

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

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

于 2010-03-16T19:49:19.600 回答
-1

我一直在寻找的答案在这个答案的评论中:PHP does not return errors at all

它首先不起作用的原因是,由于文件中存在语法错误,PHP 根本不解析它。因此,它不执行 log_errors 调用并且必须依赖 php.ini 中的设置。

– cmptrgeekken 2010 年 3 月 16 日 18:16

于 2011-02-26T23:14:24.277 回答