繁体   English   中英

“ simplexml_load_file”中的错误处理

[英]Error handling in “simplexml_load_file”

我在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()提供的无效参数”。

或者,如果您认为我也需要照顾其他事情,以使其成为永久解决方案,请也让我知道。

该函数在失败时返回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...
}

几件事帮助我解决了我的问题:

$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),但即使这样对我也不起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM