PHP - Сделайте что-нибудь, если в наборе выражений нет ошибок / предупреждений - PullRequest
1 голос
/ 01 сентября 2009

У меня есть страница, которая в основном будет использоваться для объединения нескольких XML-файлов, она будет действовать как клей, который связывает их вместе. Существует небольшая вероятность того, что объединяемые xml-файлы могут быть неправильно сформированы, поскольку у пользователя будет доступ.

Я пытаюсь переписать живой файл , если нет предупреждений / ошибок, генерируемых в конкретном наборе кода.

Пока у меня есть:

try {
    $first = simplexml_load_file( 'file.xml' );
} catch ( Exception $e ) {
    $write = false;
}

if ( !$write ) { 
// write to live file.
}

Это, очевидно, перехватывает исключения ошибок, но иногда вызовы функций могут возвращать предупреждения, а не ошибки как таковые. Что я могу использовать для перехвата ошибок, в основном только для записи, если в блоке try не было выдано ни одного предупреждения и ошибки?

Пример выдачи предупреждения:

Warning: simplexml_load_file() parser error : Start tag expected, '<'

Ответы [ 3 ]

4 голосов
/ 01 сентября 2009

Просто найдите другие «симптомы» неудачного чтения. Из simplexml_load_file ручного ввода:

Возвращаемые значения

Возвращает объект класса SimpleXMLElement со свойствами, содержащими данные, содержащиеся в документе XML. При ошибках возвращается FALSE.

Итак, используйте это так:

$first = simplexml_load_file( 'file.xml' );

if ($first == false) {
    echo "File couldn't be loaded";
    exit(); // abort normal program execution, redirect or what have you
}

// continue as normal

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

3 голосов
/ 01 сентября 2009

Несколько вещей приходят на ум в этой ситуации. если у вас всегда будут включены предупреждения (не очень хорошая идея для рабочего сервера), вы всегда можете использовать функции буферизации вывода, чтобы проверить, был ли отправлен какой-либо текст

ob_start();
... //code
$str = ob_get_contents();
if (! empty($string))
{
  // a warning was thrown.
}

Лучший способ - определить обработчик ошибок для предупреждений и делать с ними все, что вы захотите:

set_error_handler("my_warning_handler", E_WARNING);

function my_warning_handler($errno, $errstr) {
   // do something
}
1 голос
/ 01 сентября 2009

Установить обработчик ошибок и вызвать исключения оттуда. Тогда лови их как обычно.

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