PHP致命错误的测试

7
这可能有点困难,但我还是觉得值得一试。我有一个应用程序,它具有基于Web的代码编辑功能,就像在Github上找到的那样,使用ACE编辑器。问题是,它可以编辑应用程序本身内部的代码。
我已经成功实现了在保存文件之前检测解析错误的功能,这很好,但如果用户创建运行时错误,例如 MyClass extends NonExistentClass ,则该文件会通过解析检查,但保存到文件系统会导致应用程序崩溃。
有没有办法在保存到文件系统之前测试新代码是否会引起运行时错误?这似乎完全违反直觉,但我还是想问问。

哇,这是我在这个网站上看到的最好的问题之一。我也期待着答案。也许可以尝试使用 eval() 函数来解决。 - Madara's Ghost
3个回答

2
可能有帮助:如果发生运行时错误,php -f <file>将返回非零退出代码。

2
可能使用register_shutdown_function来构建一个包含致命错误信息的JSON对象。然后使用AJAX调用测试文件,并解析调用返回的值以查看是否存在错误。(显然,您也可以运行PHP文件并解析JSON对象,而不使用AJAX,只是从用户体验的角度考虑哪种方式最好)
function my_shutdown() {
    $error = error_get_last();
    if( $error['type'] == 1 ) {
        echo json_encode($error);
    }
}
register_shutdown_function('my_shutdown');

将输出类似于以下内容。
{"type":1,"message":"Fatal error message","line":1}

将其添加到测试文件的开头,然后:

$.post('/test.php', function(data) {
    var json = $.parseJSON(data);
    if( json.type == 1 ) {
        // Don't allow test file to save?
    }
});

未经测试,因此不能保证其有效...我会将问题保持开放一段时间,以了解其他人可能有的想法。 - andrewtweber

0
也许可以先将代码放在一个单独的文件中运行,然后再附加一些固定的代码在底部进行评估检查?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接