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文档功能手册页.
你可以
@include "fileWithBadSyntax.php";
Run Code Online (Sandbox Code Playgroud)
从我的快速测试中,它适用于解析错误或使用trigger_error()抛出的错误.
编辑:这是完全错误的.看看潜行的答案,这是正确的,如果有点无益的话.
| 归档时间: |
|
| 查看次数: |
10262 次 |
| 最近记录: |