RSS Feed Mash-up死了

时间:2011-12-02 00:18:42

标签: xml simplexml php

我收到以下PHP致命错误

  

致命错误:在堆栈跟踪中消息'String无法解析为XML'的未捕获异常'异常'...

错误日志指向

$xml = new SimpleXMLElement($data);

(这是除了下面的代码之后的下一行)作为罪魁祸首。

但是,当我单独运行每个Feed时,没有错误,并且Feed会保存到数据库中。

这是产生错误的代码:

$feeds = array( 
     'http://www.mtv.com/rss/news/news_full.jhtml',
     'http://www.musicweek.com/rss.asp?navcode=232',
     'http://www.cmt.com/rss/news/latestcached.jhtml',
     'http://www.billboard.com/rss/news',
 );

foreach ($feeds as $feed)
{
    $ch = curl_init();

     // causes error:
    curl_setopt($ch, CURLOPT_URL, $feed);

    // works:
    curl_setopt($ch, CURLOPT_URL, 'http://www.billboard.com/rss/news');

    curl_setopt($ch, CURLOPT_HEADER, 0 );
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $data = curl_exec($ch); // put data from rss url into variable
    curl_close($ch);
    ...

如果我切换注释行并使用$ feed变量,错误和白页。它在今天下午之前工作正常,所以我怀疑在触发此事件的其中一个源中存在XML非法的内容。

有没有更好的方法来编写这个 - 或者 - 某种方法来在必要时捕获异常?

1 个答案:

答案 0 :(得分:2)

罪魁祸首是http://www.mtv.com/rss/news/news_full.jhtml。如果你加载页面,你会得到一个可爱的错误。这是Chrome的:

  

此页面包含以下错误:

     第38行第29行的

错误:打开和结束标记不匹配:   短头行0和i下面是页面的渲染   第一个错误。

有问题的错误行目前为:

<shorthead>Big K.R.I.T. Promises </i>Live From The Underground<i> In Early 2012</shorthead>

毫不奇怪它完全失败了。


至于捕获错误,请将代码包装在

try {
     //... your code ...
} catch(Exception $exception){
     //. . . Do somethign with exception ... 
}