Error handling in “simplexml_load_file”
我在php中处理simplexml_load_file时遇到问题。 我正在尝试解析fox_sports xml,并将日期存储在我的日期库中。 我的代码如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 | $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()提供的无效参数"。
或者,如果您认为我也需要照顾其他事情,以使其成为永久解决方案,请也让我知道。
几件事帮助我解决了我的问题:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | $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。 我不知道为什么这行得通,而当我的$ foxs_xml_breaking_news如果我的行不通时,我不知道。
我什至尝试过if($ foxs_xml_breaking_news === FALSE),但即使这样对我也不起作用。
该函数在失败时返回false,因此,在循环之前,请检查
1 2 3 4 5 6 7 8 9 | $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... } |