防止用户编写的包含崩溃()

时间:2012-08-16 09:27:53

标签: php robustness

请考虑以下代码:

try {
    include_once "malformedFile.php";
} catch(Exception $e) {
    return null;
}

我无法确保文件malformedFile.php是有效的PHP代码,不会崩溃或不会调用die()。即使malformedFile.php死亡或崩溃,我怎样才能继续捕获?我的兴趣是让应用程序尽可能健壮,同时仍允许用户通过包含实现自己的插件。

感谢。

2 个答案:

答案 0 :(得分:3)

不幸的是,你做不到。如果包含的代码导致致命错误(例如语法错误),那么你就死在了水中。

可以尝试的是手动加载文件然后调用eval

$code = file_get_contents("malformedFile.php");
eval($code);

当然,这是你在做之前应该三思而后行的事情因为我们都知道eval是邪恶的等等。

最强大的选择是为您生成另一个执行include的进程(因此,如果它意外死亡没什么大不了的话),但父进程和子进程之间的通信将比仅使用一个进程更难过程

答案 1 :(得分:1)

Include将包含来源,无法绕过它。

也许您可以将此文件称为外部流程,只需使用结果即可。这可以像CLI脚本或单独的CURL调用一样完成。