当PHP有解析错误时,如何运行自定义函数/位代码

时间:2009-03-24 18:37:46

标签: php error-handling

我希望为PHP的解析错误运行一些自定义错误处理 - 语法错误时的类型,你会得到死亡的白屏。

(很明显,运行格式错误的代码时会产生的类型:

<?php
if () {
?>

我看了一下设置自定义错误处理程序,但无法发生任何事情。

3 个答案:

答案 0 :(得分:3)

另一个想法:如果您有自己的根服务器或只想在本地PC上执行脚本,您可以执行以下操作:

将代码放入新文件中进行测试,例如failure.php。 在您要检查错误的脚本(同一目录)中,按以下方式执行:

$path_to_test = 'failure.php';
$result = `php -l $path_to_test`;

然后您在$result中有解析错误消息,因为标志-l使PHP仅解析代码。它永远不会执行任何事情。您可以自行解析错误消息,甚至可以从中获取行号。

答案 1 :(得分:2)

通常情况下,您会使用set_error_handler,但文档会注意到这一点:

  

使用用户定义的函数无法处理以下错误类型:E_ERRORE_PARSEE_CORE_ERRORE_CORE_WARNINGE_COMPILE_ERROR,{{1} },以及调用E_COMPILE_WARNING的文件中引发的大多数E_STRICT

你所拥有的是set_error_handler()并且不会因此而受到影响。在PARSE_ERROR页面的“用户评论”部分中,有很多解决方案可以捕获所有错误,有些人认为它有效,有些人说没有,所以我建议只是通过它们并查找是否有任何错误事实上是工作。

答案 2 :(得分:1)

这不是致命错误,因为该术语在PHP中使用。这是一个 Parse错误。这意味着PHP无法理解您的代码,因此根本不会执行代码。因此你无法捕捉到这样的错误。 如果您确定要测试的代码不包含任何有害注入,您可以评估它:

if ( !@eval( 'if () {' ) )
{

    echo "An error occured.";

}

但请务必阅读有关如何以及何时使用eval()的建议。这可能非常危险。