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_onceまし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 に答える