我在php中的simplexml_load_file时遇到问题处理错误。我试图解析fox_sports xml,并将日期存储在我的日期库中。我的代码如下所示:
$foxs_url_breaking_news = 'http://feeds.news.com.au/public/rss/2.0/fs_breaking_news_13.xml';
$foxs_xml_breaking_news = simplexml_load_file($foxs_url_breaking_news, 'SimpleXMLElement', LIBXML_NOCDATA);
foreach($foxs_xml_breaking_news->channel[0]->item as $item)
{
$date = date('Y-m-d H:i:s',strtotime($item->pubDate));
$news->insert(array('source' => 'foxsports',
'headline' => addslashes($item->title),
'timestamp' => $date,
'description' => addslashes($item->description),
'category' => 'Breaking News',
'link' => addslashes($item->link)));
}
我的代码工作得很好。但问题是我想让它成为一个长期的解决方案。所以我需要一些错误处理: 1.如果xml的链接不再可用。 2.如果simplexml_load_file无法从链接加载xml文件。 3.如果simplexml_load_file无法加载xml,那么也不应该执行foreach,因为它会给出“为foreach()提供的无效参数”
或者,如果您认为我需要照顾其他事情,为了使其成为永久解决方案,也请让我知道。
答案 0 :(得分:2)
该函数在失败时返回false,因此,在循环之前,检查$foxs_xml_breaking_news
是否为false。
$foxs_xml_breaking_news = @simplexml_load_file($foxs_url_breaking_news, 'SimpleXMLElement', LIBXML_NOCDATA);
if($foxs_xml_breaking_new === false)
{
//cannot fetch file
}
else
{
// foreach loop...
}
答案 1 :(得分:2)
帮助我解决问题的一些事情:
$foxs_url_breaking_news = 'http://feeds.news.com.au/public/rss/2.0/fs_breaking_news_13.xml';
$foxs_xml_breaking_news = @simplexml_load_file($foxs_url_breaking_news, 'SimpleXMLElement', LIBXML_NOCDATA);
if(@simplexml_load_file($foxs_url_breaking_news, 'SimpleXMLElement', LIBXML_NOCDATA))
{
foreach($foxs_xml_breaking_news->channel[0]->item as $item)
{
$date = date('Y-m-d H:i:s',strtotime($item->pubDate));
$news->insert(array('source' => 'foxsports',
'headline' => addslashes($item->title),
'timestamp' => $date,
'description' => addslashes($item->description),
'category' => 'Breaking News',
'link' => addslashes($item->link)));
}
}
所以:我在simplexml_load_file前面使用了@,以避免在无法加载文件时出现错误信息 第二:我在我的IF语句中有整个“@simplexml_load_file($ foxs_url_breaking_news,'SimpleXMLElement',LIBXML_NOCDATA)”,而不是$ foxs_xml_breaking_news。我不知道为什么这个工作,而不是当我的IF中的$ foxs_xml_breaking_news无效时。
我甚至试过($ foxs_xml_breaking_news === FALSE),但即使这对我也不起作用。