PHP强大包括处理错误?

erj*_*ang 14 php exception include

我有一个PHP应用程序"index.php",由于各种原因,需要通过使用include_once其他脚本运行其他PHP脚本.那个其他脚本不是很稳定,那么有什么方法可以做一个include_once不会停止调用者的安全吗?

即:

<?php

safely_include_once('badfile.php'); // MAY throw syntax error, parse error, other badness
echo "I can continue execution after error";

?>
Run Code Online (Sandbox Code Playgroud)

(我知道这可能是个坏主意,等等,请放心,这不是生产环境的东西.)

sne*_*eak 36

这些答案都不会起作用.如果在包含的文件中存在解析错误,那么对@include()说的最高投票者仍将终止第一个脚本.

你不能eval()它,你不能尝试/捕获它,并且每种调用include或require的方式都将终止脚本中的所有执行.

这个问题仍然是开放的和未解决的.

http://bugs.php.net/bug.php?id=41810

这是PHP中的一个错误,至少自2006年以来这个功能一直缺失.他们将错误归类为"虚假",因为他们声称,包括()和require()在编译时发生.

如果您在RUNTIME生成include()和/或require()的字符串参数,或者对包含运行include()的代码的字符串执行eval(),则会超出窗口.


Gra*_*ben 10

唯一真正的解决方案,认为不是最优雅的解决方案,但工作原理是调用另一个解析和执行脚本的PHP解释器,除了检查它是否产生解析错误或检测到无错误消息以过滤错误消息,如PHP Parse错误blablabla.像这样的代码做:

<?php
function ChkInc($file){
   return file_exists($file) && (substr(exec("php -l $file"), 0, 28) == "No syntax errors detected in");
}
?>
Run Code Online (Sandbox Code Playgroud)

这个想法来自吉利斯 "评论include,在PHP文档功能手册页.

  • 目前,这是实现这一目标的唯一方法. (2认同)

tim*_*dev 6

你可以

@include "fileWithBadSyntax.php";
Run Code Online (Sandbox Code Playgroud)

从我的快速测试中,它适用于解析错误或使用trigger_error()抛出的错误.

编辑:这是完全错误的.看看潜行的答案,这是正确的,如果有点无益的话.