尝试捕获失败的包含

时间:2011-04-02 06:45:46

标签: php include try-catch

这是一个简单的问题,一小时的谷歌搜索似乎无法解决。你如何捕获PHP中的失败包含?对于以下代码:

try {
    include_once 'mythical_file';
} catch (Exception $e) {
    exit('Fatal');
}

echo '?';

mythical_file不存在,我得到输出'?'。我知道PHP无法捕获失败,因为它触发了警告错误,但是在这里?捕获失败的包含的最佳方法是什么?例如,以下工作:

(include_once 'unicorn') or exit('!');

但它不会触发异常,因此我无法检索文件,行和堆栈上下文。

2 个答案:

答案 0 :(得分:2)

您可以使用require_once代替include_once

答案 1 :(得分:1)

includeinclude_once触发警告(E_WARNING)requirerequire_once触发错误(E_COMPILE_ERROR) 。因此,您应该使用requirerequire_once

php.net引用:

  

“require()与include()相同   除非失败,它也会   产生致命 E_COMPILE_ERROR级别   错误。换句话说,它会停止   脚本而仅包含()   发出警告(E_WARNING)   允许脚本继续。 “