7

我正在尝试编写类似的代码:

<?php
$includes = array(
    'non_existing_file.php', //This file doesn't exist.
);

foreach ($includes as $include) {
    try {
        require_once "$include";
    } catch (Exception $e) {
        $message = $e->getMessage();
        echo "
            <strong>
              <font color=\"red\">
                A error ocurred when trying to include '$include'.
                Error message: $message
              </font>
            </strong>
        ";
    }
}

我试过require_onceand include_once,但try catch没有发现异常。

我怎样才能捕捉到这个致命错误/警告异常?

4

3 回答 3

17

由于 include/require 不会引发异常,因此请先检查您要包含的文件是否存在并且可读。例如:

$inc = 'path/to/my/include/file.php';

if (file_exists($inc) && is_readable($inc)) {

    include $inc;

} else {

    throw new Exception('Include file does not exists or is not readable.');
}
于 2013-03-24T13:29:16.197 回答
6

这些函数正在抛出E_COMPILE_ERROR,并且不能像这样被捕获。

要处理这些错误,请参阅set_error_handler

于 2013-03-24T13:01:47.397 回答
3

这个解决方案(改编自这里)对我来说很好:

register_shutdown_function('errorHandler');

function errorHandler() { 
    $error = error_get_last();
    $type = $error['type'];
    $message = $error['message'];
    if ($type == 64 && !empty($message)) {
        echo "
            <strong>
              <font color=\"red\">
              Fatal error captured:
              </font>
            </strong>
        ";
        echo "<pre>";
        print_r($error);
        echo "</pre>";
    }
}
于 2013-03-24T14:00:07.720 回答