PHP测试致命错误

Unc*_*ese 7 php runtime

这有点远,但我想我还是会问.我有一个基于Web的代码编辑应用程序,就像您在Github上使用ACE编辑器一样.问题是,可以编辑应用程序本身内的代码.

我已经设法在保存文件之前检测到解析错误,这很有效,但是如果用户创建运行时错误,例如MyClass extends NonExistentClass,文件通过解析检查,但保存到文件系统,则终止应用程序.

无论如何测试新代码是否会在将其保存到文件系统之前导致运行时错误?似乎完全违反直觉,但我想我会问.

and*_*ber 2

可能用于register_shutdown_function构建包含有关致命错误的信息的 JSON 对象。然后使用 AJAX 调用来测试该文件;解析调用的返回值以查看是否存在错误。(显然,您也可以运行 PHP 文件并解析 JSON 对象,而不使用 AJAX,只需考虑从 UX 角度来看什么是最好的)

function my_shutdown() {
    $error = error_get_last();
    if( $error['type'] == 1 ) {
        echo json_encode($error);
    }
}
register_shutdown_function('my_shutdown');
Run Code Online (Sandbox Code Playgroud)

会输出类似的东西

{"type":1,"message":"Fatal error message","line":1}
Run Code Online (Sandbox Code Playgroud)

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

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