2010-03-16 82 views
3

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

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

echo "hi"errorrrrr 
?> 

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

+0

重复:http://stackoverflow.com/questions/2421814/php-not-displaying-errors/2421885 – cmptrgeekken 2010-03-16 18:06:24

回答

-1

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

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

- cmptrgeekken月16 '10在18:16

1

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

+0

这也不起作用!奇怪。我正在使用:ini_set(“error_log”,“/home/me/log.log”); ini_set(“log_errors”,true); 是的,日志文件可由Web服务器进程写入。 – ErJab 2010-03-16 16:16:22

+0

嗯......你有什么理由不只是直接在php.ini中启用log_errors?它不会被用户看到,但会记录整个站点的任何问题。 – 2010-03-16 16:47:06

+0

哦,是的,我可以做到这一点。谢谢。 – ErJab 2010-03-16 17:18:59

1

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

你必须使用另一种方法来设置这些指令,虽然它可能会非常棘手。看起来你的PHP运行的是CGI而不是apache模块,因此,设置ini指令的唯一方法是编辑php.ini本身。

可以肯定的,请运行phpinfo();,看看它说的服务器API。

无论如何,你必须检查Apache的error_log每次你看到500错误,找出发生了什么。

1

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

如果您将这些设置置于PHP文件中,而这些文件首先由于语法错误而无法编译,则这些设置不会占用您的时间。

1

如果你根本无法改变php的配置,你可以做的一个技巧。创建一个包含错误文件的新文件。在进行包含之前,请设置所需的配置。

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

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