#php #error-handling
#php #обработка ошибок
Вопрос:
Я очень новичок в PHP. У меня есть строка кода в серверном скрипте, который открывает файл:
$fh = fopen($myFile, 'r');
Когда я запускаю этот код через phplint, он выдает мне уведомление:
$fh = fopen($myFile, 'r');
_ HERE
==== 19: notice: unhandled error(s): E_WARNING
Ранее я пытался создать обработчик ошибок и специально настроить его для обработки E_WARNING
следующим образом:
set_error_handler("errorHandler", E_WARNING);
Но я получаю такое же уведомление. Я бы хотел сделать это правильно. Существует ли какой-либо другой механизм для обработки этой ошибки, который phplint
считается правильным?
Комментарии:
1. Вы могли бы запустить file_exists() перед выполнением fopen()
2. @JohnP прав, но
phplint
не заметил бы, что ошибка никогда не сработает в этом случае. Означает ли это, что разумно игнорировать такого рода предупреждения от phplint? (Извините, если это так просто).3. Мне самому интересно об этом. Я не использую PHPLint, поэтому не знаю. Проверки существования файла перед его открытием должно быть достаточно, чтобы остановить ошибки в 99,9% случаев использования. Вы также могли бы использовать
is_readable
, убивая двух зайцев одним выстрелом, так сказать4. @JohnP похоже, что phplint только пытается предупредить меня в этом случае. это не значит, что я неправильно обработал ошибку. Если вы хотите опубликовать свой комментарий в качестве ответа, я могу его «проверить».
Ответ №1:
Предупреждение PHPLint указывает, что функция (в данном случае fopen) задокументирована как «вызывающая» E_WARNING при возникновении условия ошибки.
Если это произойдет, то, скорее всего, вы получите сообщение об ошибке, отображаемое в консоли или на экране. Большинство программистов не хотят этого в производственном коде и отключат ошибку, добавив @ для подавления этого предупреждения или изменив php.ini (error_reporting).
PHPLint просто напоминает вам, что вы не добавили @. Lint хотел бы, чтобы ваш код был больше похож:
$fh = @fopen($myFile, 'r');
// check $fh here
Очевидно, что добавление file_exists() или is_readable() перед вызовом не приведет к отключению PHPLint.
Ссылка: http://www.icosaedro.it/phplint/manual.html?p=errors
Ссылка: http://php.net/manual/en/function.fopen.php «Если открыть не удается, генерируется ошибка уровня E_WARNING. Вы можете использовать @ для подавления этого предупреждения.»
Ответ №2:
Вы можете использовать is_readable()
метод PHP, чтобы проверить, существует ли файл и доступен ли он для чтения, перед чтением из файла.
Ввод вручную : http://php.net/manual/en/function.is-readable.php
Ответ №3:
Вы можете отключить сообщение об ошибке с помощью @fopen
, а затем проверить, возвращается ли вместо этого значение === FALSE
.