Использование php требует один раз для регистрации ошибки

Я использую require_once в своих php-скриптах и ​​хотел бы знать правильный способ написания кода, чтобы он обрабатывал ошибки, если это не удается.

На данный момент я просто использую require_once('included_file.php'); Я думаю использовать это:

if (!@require_once('included_file.php')){
//log error, print nice error message, and exit;
}

Является ли это «хорошей практикой» или есть другой/лучший способ сделать это. Я прочитал эту страницу ( http://us3.php.net/manual/en/language.operators.errorcontrol.php ) и увидеть использование OR DIE, но я просто не уверен, что это лучший способ.

Спасибо!


person Joeme    schedule 17.06.2013    source источник


Ответы (4)


Если вызов require* терпит неудачу, сценарий немедленно останавливается, никакой другой код выполняться не будет. Вы не можете корректно обработать ошибку require_once. Вы можете настроить свой веб-сервер так, чтобы он обрабатывал страницу с ошибкой в ​​случае неудачного завершения процесса PHP. В противном случае вам придется использовать в основном код, который вы показываете, но используя include_once. Вы не должны использовать @ для подавления возникающей ошибки, а вместо этого просто отключите отображение ошибки, чтобы ошибка была зарегистрирована.

Сказав все это, вы должны использовать require* для файлов, которые необходимы для запуска вашего скрипта. Вам даже не следует писать какой-либо дополнительный код для обработки ситуации, когда эти файлы недоступны, потому что это означает, что ваше приложение находится в полностью непригодном для использования состоянии. Если все необходимые файлы даже отсутствуют, приложение даже не следует развертывать на производственном сервере и, следовательно, не требуется корректная обработка ошибок. За некоторые ошибки на самом деле хочется врезать вам по морде; отсутствие важных файлов является одним из них.

person deceze♦    schedule 17.06.2013
comment
Некоторые из моих скриптов обслуживают изображения, предоставляют json-каналы и т. д. Таким образом, метод вывода ошибки очень важен. Все ваши пункты имеют смысл, большое спасибо за подробный ответ. - person Joeme; 17.06.2013

require_once вызовет ошибку compilation. Следовательно, выполнение будет остановлено, и пользовательское ведение журнала не будет выполняться.

см. документацию для require http://www.php.net/manual/en/function.require.php

require is identical to include except upon failure it will also produce a fatal
E_COMPILE_ERROR level error. In other words, it will halt the script whereas
include only emits a warning (E_WARNING) which allows the script to continue.
person user20232359723568423357842364    schedule 17.06.2013

Включение файла с использованием required_once означает, что скрипт прекратит выполнение, если не сможет загрузить данный файл. Хорошо использовать require_once по определенным критериям. Это зависит от важности файла включения.

person Amar Banerjee    schedule 17.06.2013

Ну, первоначальная мысль состоит в том, что PHP уже обрабатывает 2/3 того, что вы хотите, - регистрирует фатальную ошибку и завершает работу, если требуемый файл не загружается. Похоже, что настоящая проблема заключается в том, что вам нужна своего рода «красивая» страница с ошибками — на этой странице есть довольно хорошее пошаговое руководство о том, как это настроить — http://papermashup.com/create-страница-ошибка-обрабатывать-все-ошибки-с-php/

person streetlogics    schedule 17.06.2013
comment
Хороший !! Я попробую. Я также смотрю на это: stackoverflow.com/questions/2911094/ - person Joeme; 17.06.2013
comment
Да, я тоже собирался порекомендовать другой ответ из этого поста, в прошлом я использовал пользовательские обработчики ошибок, которые также могут выполнять некоторые из того, что вы ищете - php.net/manual/en/function.set-error-handler.php . - person streetlogics; 17.06.2013