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


Preventing crash in user-written includes()

请考虑以下代码:

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

我没有办法确保文件格式错误的文件.php是有效的PHP代码,不会崩溃或不会调用die()。即使格式不正确的文件.php死亡或崩溃,我如何继续捕获?我的兴趣是使应用程序尽可能健壮,同时仍然允许用户通过包含实现自己的插件。

谢谢。

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

您可以尝试手动加载文件,然后调用eval

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

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

最健壮的选择是生成另一个为你做include的进程(所以如果它意外死亡也没什么大不了的),但是父进程和子进程之间的通信将比只有一个进程要困难得多。

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

也许您可以将此文件作为外部进程调用,然后仅使用结果。这可以像 CLI 脚本一样完成,也可以使用单独的 CURL 调用来完成。