2011-12-19 97 views
6

偶尔我会有一些糟糕的PHP代码,我会得到一个500错误。我在Windows 7笔记本电脑上运行Apache 2.2。作为一个IDE我已经开始使用PhpStorm。PHP 5.3 - 排错500错误 - 调试 - 解析错误

什么是最好的方法来捕捉这些错误,并获知行号? 为什么OOP相关的语法错误倾向于抛出500个错误,而函数问题往往会返回正常的错误?

语法错误的示例:使用单个冒号而不是两个冒号从类调用静态方法。

UPDATE: 请参阅接受的答案和所有评论。

+0

我不知道你所说的“正常的错误”是什么意思?如果代码由于语法错误而无法解析,那么我会希望从Web服务器获得500个日志中的编译错误详细信息(而不是显示给用户)。 – David 2011-12-19 16:29:07

回答

12

当PHP遇到致命错误,如E_PARSEE_ERROR和未捕获的异常时,将以“500”响应。 500是“内部服务器错误”的HTTP响应代码 - 处理请求时发生不可恢复的问题。

在php.ini,在开发机器上,你应该设置你的error_reporting水平(至少)E_NOTICE - 最好E_ALL - 并确保display_errors上。这会向您显示浏览器中的错误消息,包括“500”错误。

只要在php.ini中启用log_errors,您也可以检查您的Apache错误日志,错误将在那里列出。默认情况下,这将在<apache_ServerRoot>\logs\error.log

您还可以控制这一切都在运行时ini_set()error_reporting()

+0

该静态情况必须是E_PARSE错误。找到这个问题真的很难 - 我认为必须有更好的方式。 – BuddyJoe 2011-12-19 16:39:36

+0

打开了error_reporting。 +1和时区设置。 – BuddyJoe 2011-12-19 16:40:26

+0

@brunot如果你没有看到带有'error_reporting'的消息,'display_errors'可能关闭。在某些情况下,错误信息不会被输出,但这仅仅是在内部出现错误并且崩溃的情况下。发生这种情况时,Apache日志中通常会有一条消息告诉你*发生了什么,尽管调试它为什么发生可能非常困难。在这种情况下,从命令行运行脚本*有时可以帮助获取有用的错误消息,但并非总是如此。 – DaveRandom 2011-12-19 16:43:50