RSS Feed Mash-up умер - PullRequest
       11

RSS Feed Mash-up умер

1 голос
/ 02 декабря 2011

Я получаю следующую фатальную ошибку PHP

Фатальная ошибка: необработанное исключение «Исключение» с сообщением «Строка не может быть проанализирована как XML» в трассировке стека ...

И журнал ошибок указывает на строку

$xml = new SimpleXMLElement($data);

(которая является следующей строкой после кода, кроме приведенного ниже) в качестве виновника.

Однако, когда я запускаюКаждый канал в отдельности, ошибки нет, и канал сохраняется в базе данных.

Этот код выдает ошибку:

$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);
    ...

Если я переключаю закомментированные строки и использую $переменная подачи, ошибка и белая страница.До сегодняшнего дня все работало нормально, поэтому я подозреваю, что в одном из каналов есть что-то недопустимое в XML.

Есть ли лучший способ написать это или какой-нибудь способ перехватить исключениеесли нужно?

1 Ответ

2 голосов
/ 02 декабря 2011

виновник http://www.mtv.com/rss/news/news_full.jhtml.Если вы загрузите страницу, вы получите прекрасную ошибку.Вот код Chrome:

Эта страница содержит следующие ошибки:

ошибка в строке 296 в столбце 38: несоответствие открывающего и завершающего тега: короткая строка 0 и я Ниже приведено отображениестраница до первой ошибки.

В данный момент указана неправильная строка:

<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 ... 
}
...