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