попробуйте поймать не удалось включить - PullRequest
5 голосов
/ 02 апреля 2011

Это простой вопрос, который один час Google не может решить.Как вы ловите неудачное включение в PHP?Для следующего кода:

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

echo '?';

Если не существует файла mythical_file, я получаю вывод «?».Я знаю, что PHP не может поймать сбой требуется, потому что он вызывает ошибку предупреждения, но здесь?Каков наилучший способ поймать неудачника?Например, работает следующее:

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

, но оно не вызывает исключение, поэтому я не могу получить контекст файла, строки и стека.

Ответы [ 2 ]

2 голосов
/ 02 апреля 2011

Вы можете использовать require_once вместо include_once

1 голос
/ 02 апреля 2011

включают и include_once триггер предупреждение (E_WARNING) , требуют и require_once триггер ошибка (E_COMPILE_ERROR) . Поэтому вы должны использовать require или require_once.

php.net цитата:

"require () идентичен include () кроме случаев неудачи создать уровень роковой E_COMPILE_ERROR ошибка. Другими словами, это остановит скрипт, тогда как только include () выдает предупреждение (E_WARNING), которое позволяет продолжить сценарий. «

...