2013-05-29 1 views
3

Я пытаюсь получить SimplePie потерпеть неудачу изящно, если один из каналов сдают оказывается недоступен или недействителен (из-за проблемы сервера на конце провайдера фида)Как заставить SimplePie изящно терпеть неудачу на недопустимой ленте?

код у меня это является :

$this->feed= new SimplePie(); 
// Set which feed to process. 
$this->feed->set_feed_url('http://my_feed_goes_here'); // Bogus 
$this->feed->handle_content_type(); 

// Run SimplePie. 
$this->feed->init(); 

проблема, если FEED_URL оказывается недействительным, я получаю следующее сообщение об ошибке, как только она попадает $this->feed->init();

Fatal error: Call to undefined method DOMElement::getLineNo() 

Я просмотрел документацию, и я могу я ничего не вижу t проверка. Я просмотрел эту страницу об ошибке (http://simplepie.org/wiki/reference/simplepie/error), но это действительно работает, только если URL-адрес полностью недействителен и не загружается. В случае, когда URL-адрес возвращается с 404 или что-то еще, что не является допустимым фидом, ошибка $ feed-> пуста.

Не существует ли какой-либо механизм, встроенный в SimplePie, чтобы я мог проверить, есть ли у меня верный ответ, так что я могу изящно потерпеть неудачу, если я этого не сделал?

+0

Вы используете последнюю версию SimplePie? – Revent

+0

Да, я на 1.3.1, что является последним и самым большим. – dvanhook

ответ

0

Это не может быть встроен в SimplePie, но в вашем вызывающему PHP вы можете использовать попробовать/поймать блок:

try { 
    $this->feed->init(); 
} catch (Exception $e) { 
    echo 'Caught exception: ', $e->getMessage(), "\n"; 
} 

Хотя в зависимости от ошибки, это может не работать.

+0

Хмм, я проверю это и вернусь к вам. – dvanhook

+0

Да, извините, это тоже не получилось. Все еще получаю фатальную ошибку. – dvanhook

+0

Хм, может быть ошибкой в ​​SimplePie. Если вы храбры, вы можете попытаться проследить там, где это происходит, и исправить ошибку. – Revent

1

В SimplePie 1.3.1 ->init() вернет ложь, если она не может читать или разобрать URL, так что вы можете сделать это:

if (! $feed->init()) { 
    // log your error, "return false" or handle the failure some other way 
} 

Основываясь на моем чтении simplepie\library\SimplePie.php, он не генерирует любые исключения, и поэтому Try/Catch не будет работать.

Смежные вопросы