Intereting Posts
Как глобально изменить значение пользовательских измерений для идентификатора клиента? laravel 4 -> получить имена столбцов Извлечь желаемый номер из данных В PHP, как я могу получить доступ к массиву «: private» в объекте? Laravel Недопустимый оператор и комбинация значений Exception on with () с отношением ownTo () избегая инъекций MySQL с классом Zend_Db Являются ли ресурсы ресурсов ICU для ресурсов перевода сообщений SOAP PHP разбор ошибок WSDL: не удалось загрузить внешний объект? как сделать php-выражения и выполнить из базы данных? Любой способ определить выбранный внутри тега <select>, а не на <option> ЗАКАЗАТЬ по одному идентификатору, если в одной таблице больше одинаковых идентификаторов Открытие подключения к HTTP-серверу с помощью PHP Список параметров PDOStatement :: bindParam data_type Невозможно получить данные изображения из таблицы и отображаемого изображения Как получить все изображения hashtag в Instagram без API?

Обработка ошибок simplexml php

Я использую следующий код:

function GetTwitterAvatar($username){ $xml = simplexml_load_file("http://twitter.com/users/".$username.".xml"); $imgurl = $xml->profile_image_url; return $imgurl; } function GetTwitterAPILimit($username, $password){ $xml = simplexml_load_file("http://$username:$password@twitter.com/account/rate_limit_status.xml"); $left = $xml->{"remaining-hits"}; $total = $xml->{"hourly-limit"}; return $left."/".$total; } 

и получение этих ошибок, когда поток не может подключиться:

 Warning: simplexml_load_file(http://twitter.com/users/****.xml) [function.simplexml-load-file]: failed to open stream: HTTP request failed! HTTP/1.0 503 Service Unavailable Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity "http://twitter.com/users/****.xml" Warning: simplexml_load_file(http://...@twitter.com/account/rate_limit_status.xml) [function.simplexml-load-file]: failed to open stream: HTTP request failed! HTTP/1.0 503 Service Unavailable Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity "http://***:***@twitter.com/account/rate_limit_status.xml" 

Как я могу обрабатывать эти ошибки, чтобы я мог отображать удобное для пользователя сообщение вместо того, что показано выше?

Solutions Collecting From Web of "Обработка ошибок simplexml php"

Я думаю, что это лучший способ

 $use_errors = libxml_use_internal_errors(true); $xml = simplexml_load_file($url); if (false === $xml) { // throw new Exception("Cannot load xml source.\n"); } libxml_clear_errors(); libxml_use_internal_errors($use_errors); 

Дополнительная информация: http://php.net/manual/en/function.libxml-use-internal-errors.php

Я нашел хороший пример в документации php .

Таким образом, код:

 libxml_use_internal_errors(true); $sxe = simplexml_load_string("<?xml version='1.0'><broken><xml></broken>"); if (false === $sxe) { echo "Failed loading XML\n"; foreach(libxml_get_errors() as $error) { echo "\t", $error->message; } } 

И результат, как мы / я ожидал:

Ошибка загрузки XML

 Blank needed here parsing XML declaration: '?>' expected Opening and ending tag mismatch: xml line 1 and broken Premature end of data in tag broken line 1 

Если вы посмотрите на руководство, есть параметр:

 SimpleXMLElement simplexml_load_file ( string $filename [, string $class_name = "SimpleXMLElement" [, int $options = 0 [, string $ns = "" [, bool $is_prefix = false ]]]] ) 

Список опций доступен: http://www.php.net/manual/en/libxml.constants.php

Это правильный способ подавления предупреждений о разборке предупреждений:

 $xml = simplexml_load_file('file.xml', 'SimpleXMLElement', LIBXML_NOWARNING); 

Это старый вопрос, но по-прежнему актуальный и сегодня.

Правильный способ обработки исключений при использовании простого элемента SimpleXMLElment выглядит так.

 libxml_use_internal_errors(TRUE); // this turns off spitting errors on your screen try { $xml = new SimpleXMLElement($xmlStringOfData); } catch (Exception $e) { // Do something with the exception, or ignore it. } 

Мой маленький код:

 try { libxml_use_internal_errors(TRUE); $xml = new SimpleXMLElement($xmlString); echo '<pre>'.htmlspecialchars($xml->asXML()).'</pre>'; } catch (Exception $e) { echo 'Caught exception: ' . $e->getMessage() . chr(10); echo 'Failed loading XML: ' . chr(10); foreach(libxml_get_errors() as $error) { echo '- ' . $error->message; } } 

Пример результата:

 Caught exception: String could not be parsed as XML Failed loading XML: - Opening and ending tag mismatch: Body line 3 and Bod-y 

В документации говорится, что в случае ошибки файл simplexml_load_file возвращает FALSE. Таким образом, вы можете использовать оператор «shut-up» (@) в сочетании с условным выражением:

 if (@simplexml_load_file($file)) { // continue } else { echo 'Error!'; } 

if (simplexml_load_file ($ file)! == false) {// continue} else {echo 'Error!'; }

Может быть, и Твиттер ?