Я читаю ссылку RSS, если она недействительна, а затем выбрасываю исключение
Я занимаюсь разработкой веб-приложения для автоматизации RSS-каналов с использованием PHP.
проблема
В моем модуле я добавляю ссылку rss и сохраняю в базе данных, затем эти ссылки отображаются для пользователя, и когда они нажимают на ссылку, они могут показать данные ссылки.
Но иногда эти ссылки не работают, поэтому выдает следующие исключения во время выполнения:
Предупреждение:
DOMDocument::load(http://webdesign.about.com/library /z_whats_new.rss%2Ccname=Web%20design%20about)
[domdocument.load]: не удалось открыть поток: сбой HTTP-запроса! HTTP/1.1 404 не найден в C:\xampp\htdocs\nf\showrss.php в строке 59Предупреждение:
DOMDocument::load()
[domdocument.load]: предупреждение ввода / вывода: не удалось загрузить внешнюю сущность"http://webdesign.about.com/library/z_whats_new.rss%2Ccname=Web%20design%20about"
в C:\xampp\htdocs\nf\showrss.php в строке 59Неустранимая ошибка: вызов функции-члена
getElementsByTagName()
на необъекте в C:\xampp\htdocs\nf\showrss.php в строке 63
Итак, как обработать это исключение и показать пользователю удобное сообщение о том, что ваша ссылка не работает или не имеет допустимого формата rss.
Ниже приведен мой php-файл для чтения ссылки rss.
ShowRss.php
<?php
$xml=$_GET["xml"];
$cname=$_GET['cname'];
$xmlDoc = new DOMDocument();
$xmlDoc->load($xml);
$channel=$xmlDoc->getElementsByTagName('channel')->item(0);
$channel_title = $channel->getElementsByTagName('title')
->item(0)->childNodes->item(0)->nodeValue;
$channel_link = $channel->getElementsByTagName('link')
->item(0)->childNodes->item(0)->nodeValue;
$channel_desc = $channel->getElementsByTagName('description')
->item(0)->childNodes->item(0)->nodeValue;
echo $cname;
echo("<p><a href='" . $channel_link
. "'>" . $channel_title . "</a>");
echo("<br>");
echo($channel_desc . "</p>");
$x=$xmlDoc->getElementsByTagName('item');
$c=$xmlDoc->getElementsByTagName('item')->length;
for ($i=0; $i<$c; $i++) {
$item_title=$x->item($i)->getElementsByTagName('title')
->item(0)->childNodes->item(0)->nodeValue;
$item_link=$x->item($i)->getElementsByTagName('link')
->item(0)->childNodes->item(0)->nodeValue;
$item_desc=$x->item($i)->getElementsByTagName('description')
->item(0)->childNodes->item(0)->nodeValue;
echo ("<p><h2><a href='" . $item_link
. "'>" . $item_title . "</a></h2>
echo ("<br>");
echo ($item_desc ."</p>");
}
}
?>
Пожалуйста, помогите мне.. Спасибо заранее.!
1 ответ
DOMDocument::load() возвращает false при сбое, поэтому вы можете сделать что-то вроде:
if ($xmlDoc->load($xml)) {
// work with the XML
} else {
// display an error message
}
Это не помешает появлению предупреждений, но позволит решить проблему. Наличие предупреждений может быть полезно для вас, поэтому вы можете увидеть в своих журналах, как часто происходит сбой ресурса, от которого вы зависите.