Используя 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, но я вполне мог использовать их неправильно.
Попробуйте:
if (!@$xmlDoc->load($url)){ return FALSE; }
Ваша функция get_xml
немедленно вернется FALSE
если load
метода не загружает данные XML
В теории (и если я правильно помню) , вы должны уловить эти ошибки (поэтому вы вызываете их самостоятельно, вместо того, чтобы отображать их), используя функции libxml 1 .
Я особенно задумываюсь о libxml_use_internal_errors()
:
libxml_use_internal_errors()
позволяет отключить стандартные ошибки libxml и включить обработку ошибок пользователя.
1. libxml
– библиотека, использующая внутренне DOMDocument
– и SimpleXML
, SimpleXML