我收到以下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非法的内容。
有没有更好的方法来编写这个 - 或者 - 某种方法来在必要时捕获异常?
答案 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 ...
}