【问题标题】:How do I run a custom function/bit of code when PHP has a parse error当 PHP 出现解析错误时,如何运行自定义函数/代码位
【发布时间】:2009-03-24 18:37:46
【问题描述】:

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

(要清楚,运行格式错误的代码时会产生的类型:

<?php
if () {
?>

)

我查看了设置自定义错误处理程序,但没有发生任何事情。

【问题讨论】:

    标签: php error-handling


    【解决方案1】:

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

    将要测试的代码放在一个新文件中,比如failure.php。 在您要检查错误的脚本(同一目录)中,这样做:

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

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

    【讨论】:

    • 在我的站点测试中实现了这一点。非常感谢您的提示!
    【解决方案2】:

    通常您会为此使用 set_error_handler,但文档会注明:

    以下错误类型无法使用用户定义的函数处理:E_ERRORE_PARSEE_CORE_ERRORE_CORE_WARNINGE_COMPILE_ERRORE_COMPILE_WARNING 以及文件中引发的大部分 E_STRICT其中set_error_handler() 被调用。

    你所拥有的是一个PARSE_ERROR 并且不能被这个捕获。在set_error_handler 页面的“用户评论”部分中,有很多解决方案可以捕获所有错误,有些人说它有效,有些人说它无效,所以我建议只是通过它们并找出是否有任何事实工作。

    【讨论】:

    • 嗯,有道理。我确实阅读了一些想法,但找不到一个可行的 - 或者确实做了任何事情..
    【解决方案3】:

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

    if ( !@eval( 'if () {' ) )
    {
    
        echo "An error occured.";
    
    }
    

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

    【讨论】:

    • 这是一个有趣的想法,虽然我并不想真正执行代码。可能最终会在几个地方使用这个想法......
    猜你喜欢
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多