Как правильно обрабатывать ошибки в PHP через phplint

#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 .