这是一个很长的镜头,但我想我还是会问。我有一个基于Web的代码编辑应用程序,就像您在Github上使用ACE编辑器一样。问题是,可以编辑应用程序本身内的代码。
我已经设法在保存文件之前检测到解析错误,这很有效,但是如果用户创建了运行时错误,例如MyClass extends NonExistentClass
,则文件会通过解析检查,但会保存到文件系统,从而导致死亡申请。
在将代码保存到文件系统之前,是否有测试新代码是否会导致运行时错误?似乎完全违反直觉,但我想我会问。
答案 0 :(得分:2)
可能有用:如果出现运行时错误,php -f <file>
将返回非零退出代码。
答案 1 :(得分:2)
可能使用register_shutdown_function
来构建包含有关致命错误信息的JSON对象。然后使用AJAX调用来测试文件;从调用中解析返回的值以查看是否存在错误。 (显然你也可以在不使用AJAX的情况下运行PHP文件并解析JSON对象,只考虑从UX的角度来看最好的东西)
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?
}
});
答案 2 :(得分:0)
可能首先在单独的文件中运行代码并在底部附加一些固定代码以检查它是否进行评估?