2013-10-22 87 views
0

我遇到了...刺激,我猜...在我使用的应用程序中使用自定义错误处理程序,我希望这里有人能提供一些见解。自定义PHP错误处理

作为我们网站数据聚合的一部分,自定义蜘蛛和解析器是在我们的代码库之外的基础上建立的。它们存储在数据库中,并通过齿轮过程中的eval运行。

设置了一个自定义错误处理程序,在出现错误时插入正在运行的公司的ID号(例如,如果在正则表达式中忘记了分隔符,或者当我还没有分隔符时,我的咖啡)。大多数情况下,这个错误处理程序很好。

但是,我注意到如果在eval'd代码中有一个未终止的注释,那么错误处理程序不会被使用,所以php错误日志不包含具有该问题的公司的ID号。

我们处理下面的错误类型的处理器

  • E_WARNING
  • E_USER_WARNING
  • E_ERROR
  • E_USER_ERROR

日志状态注释字符串错误是 '警告' ,所以我不知道为什么自定义hanlder没有被调用。

有什么想法?

+0

你使用'的set_error_han dler()'处理错误? –

+0

只是好奇,你可以在所有代码的末尾添加'/ **/\ n'吗?这将强制终止评论。 – cwallenpoole

+0

未终止的评论并不是唯一引起奇怪问题的事情,但它是最容易解释的。 – Lisa

回答

1

按照documentation你不能使用E_ERROR自定义功能error_handler()

The following error types cannot be handled with a user defined function: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, and most of E_STRICT raised in the file where set_error_handler() is called.

+0

因此,如果它被作为警告放在日志中,我猜这是一个核心或编译警告?有没有办法说出它是什么? – Lisa

+1

对不起,因为我在我的所有机器上安装了'xdebug',而且我的错误如下所示:'PHP Parse error:syntax error,unexpected')',期待'('in ... on line 38,'with a堆栈跟踪您可以尝试从以下问题实现解决方案:http://stackoverflow.com/questions/277224/how-do-i-catch-a-php-fatal-error – nietonfir