我正在阅读RSS链接,如果它是无效的,然后抛出异常,如何使用PHP处理它


I am reading RSS link if it is not valid then throwing exception, How to handle it using PHP

我正在使用PHP为RSS提要自动化开发web应用程序。

问题
在我的模块中,我添加rss的链接并存储在数据库中,然后这些链接显示给用户,当他们点击链接时,他们可以显示链接的数据
但有时这些链接不起作用,因此抛出以下运行时异常:

警告:DOMDocument::load(http://webdesign.about.com/library /z_whats_new.rss%2Ccname=Web%20design%20about)[domdocument.load]:无法打开流:HTTP请求失败!HTTP/1.1 404在第59行的C:''examplep''htdocs''nf''showrs.php中找不到

警告:DOMDocument::load()[domdocument.load]:I/O警告:无法加载外部实体C:''examplep''htdocs中的"http://webdesign.about.com/library/z_whats_new.rss%2Ccname=Web%20design%20about"''nf''showrs.php,第59行

致命错误:在第63行的C:''examplep''htdocs''nf''showrs.php中的非对象上调用成员函数getElementsByTagName()

那么,如何处理此异常并向用户显示用户友好的消息,即您的链接已断开或不是有效的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>");
}
}
?>

DOMDocument::load()在失败时返回false,因此您可以执行以下操作:

if ($xmlDoc->load($xml)) {
    // work with the XML
} else {
    // display an error message
}

这不会阻止发出警告,但它确实允许您处理问题。发出警告可能对您很有用,因此您可以在日志中看到您所依赖的资源出现故障的频率。