Предотвращение ошибок при попытке загрузить недоступный файл - PullRequest
1 голос
/ 23 июля 2011

Используя php, я хочу загрузить XML-файлы с нескольких веб-сайтов и предотвратить ошибки, если один из них не работает. Я использую этот код для доступа к URL.

function get_xml($url){
 $xmlDoc = new DOMDocument();
 $xmlDoc->load($url); // This is the line causing errors
 $channel=$xmlDoc->getElementsByTagName('channel')->item(0);
 ...

Если на $ url нет доступной ленты новостей xml, я получаю множество сообщений об ошибках, таких как:

Предупреждение: DOMDocument :: load (): после публичного идентификатора требуется пространство

Предупреждение: DOMDocument :: load (): SystemLiteral "или" ожидается

Предупреждение: DOMDocument :: load (): SYSTEM или PUBLIC, URI отсутствует

Предупреждение: DOMDocument :: load (): Несоответствие открывающего и завершающего тега: строка ссылки 5 и заголовок

Что я могу сделать, чтобы предотвратить загрузку $ url, если канал недоступен? Я пробовал:

if(file_exists($url)){
$xmlDoc->load('$url');
}

И вещи с fopen и @load, но я вполне мог бы использовать их неправильно.

Ответы [ 2 ]

1 голос
/ 23 июля 2011

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


Я особенно думаю о libxml_use_internal_errors():

libxml_use_internal_errors() позволяет отключить стандартные ошибки libxml и включить обработку ошибок пользователя.


1. libxml - это библиотека, которая используется внутри DOMDocument - и SimpleXML, кстати

0 голосов
/ 23 июля 2011

Попробуйте с помощью:

if (!@$xmlDoc->load($url)){
  return FALSE;
}

Ваша функция get_xml немедленно вернется FALSE, если метод load не сможет загрузить данные XML

...