PHP Script останавливает обработку при ошибке предупреждения? - PullRequest
3 голосов
/ 26 ноября 2009

У меня есть PHP-скрипт, который останавливает обработку (похоже) предупреждения PHP. Общая ошибка: «Предупреждение PHP: fopen» - «не удалось открыть поток: нет такого файла или каталога».

Должен ли PHP остановиться здесь? Я думал только о фатальных ошибках?

Есть ли способ заставить его продолжить?

Ответы [ 6 ]

2 голосов
/ 26 ноября 2009

Предупреждение выдается, но выполнение скрипта продолжается. Тот факт, что ваш сценарий останавливается, скорее всего, связан с обработкой, которую вы пытаетесь выполнить позже, а не с самим предупреждением.

Предыдущее предложение использовать file_exists и is_readable является хорошим.

2 голосов
/ 26 ноября 2009

Не знаю, как продолжить на ошибках, но лучше всего было бы предотвращение ошибок в первую очередь:

http://php.net/manual/en/function.file-exists.php

http://www.php.net/manual/en/function.is-readable.php

1 голос
/ 26 ноября 2009

Как отмечено на странице документации php ,

Если открытие не удается, генерируется ошибка уровня E_WARNING. Вы можете использовать @ для подавления этого предупреждения.

1 голос
/ 26 ноября 2009

Да, должно быть, если error_reporting () уровень достаточно низок.

Да, есть. Добавьте "@" перед fopen, что вызывает разбрасывание, например: @fopen(...)

0 голосов
/ 26 ноября 2009

В дополнение к тому, что Конрад Мейер упомянул в руководстве по PHP:

$fres = @fopen('file.ext','w+');
if($fres){
  // so anything you want with the file
}

fopen возвращает false при ошибке. Если при fopen произошла ошибка, и вы не используете if($fres), последующие функции файловой операции выдают ошибку, сообщающую, что $fres не является допустимым дескриптором файла.

0 голосов
/ 26 ноября 2009

Даже если бы оно продолжалось, программа, скорее всего, не работала бы так, как предполагалось. В любом случае, попробуйте обработать исключение:

try {
    # code that may cause an error
}
catch( Exception $e ) {
    # do error handling mechanism
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...