Игнорирование ошибки PHP при печати пользовательского сообщения об ошибке - PullRequest
0 голосов
/ 19 мая 2009

Итак:

@fopen($file);

Игнорирует все ошибки и продолжает

fopen($file) or die("Unable to retrieve file");

Игнорирует ошибку, убивает программу и печатает пользовательское сообщение

Есть ли простой способ игнорировать ошибки в функции, печатать собственное сообщение об ошибке и не убивать программу?

Ответы [ 5 ]

4 голосов
/ 19 мая 2009

Исключения использования:

try {
   fopen($file);
} catch(Exception $e) {
   /* whatever you want to do in case of an error */
}

Больше информации на http://php.net/manual/language.exceptions.php

4 голосов
/ 19 мая 2009

Обычно:

if (!($fp = @fopen($file))) echo "Unable to retrieve file";

или используя ваш путь (который отбрасывает дескриптор файла):

@fopen($file) or printf("Unable to retrieve file");
2 голосов
/ 19 мая 2009

slosd путь не сработает. fopen не создает исключение. Вы должны бросить это вручную Я изменю ваш второй пример и объединю его с slosd s:

try
{
    if (!$f = fopen(...)) throw new Exception('Error opening file!');
} 
catch (Exception $e)
{
    echo $e->getMessage() . ' ' . $e->getFile() . ' at line ' . $e->getLine;
}
echo ' ... and the code continues ...';
1 голос
/ 19 мая 2009

Вот мое собственное решение. Обратите внимание, что для справки ему требуется либо глобальная переменная уровня сценария, либо статическая переменная класса. Я написал это в стиле класса для справки, но пока он может найти массив, все в порядке.

class Controller {
  static $errors = array();
}

$handle = fopen($file) or array_push(Controller::errors,
  "File \"{$file}\" could not be opened.");

 // ...print the errors in your view
0 голосов
/ 19 мая 2009

Вместо смерти вы можете выдать исключение и централизованно обрабатывать ошибки любым удобным для вас способом: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...