我正在尝试让SimplePie优雅地失败,如果我提交的其中一个Feed变得不可用或无效(由于Feed提供商端的服务器问题)
我得到的代码是:
$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()
我查看了文档,但我看不到有关验证的任何内容。我确实看到了关于错误检查(http://simplepie.org/wiki/reference/simplepie/error)的这个页面,但只有在URL完全无效且无法加载时才能正常工作。如果网址带有404,或其他不是有效Feed的内容,则$ feed->错误为空。
是不是有一些内置在SimplePie中的机制让我看看我是否有一个有效的反馈,所以如果我不这样做,我会优雅地失败?
答案 0 :(得分:2)
在SimplePie 1.3.1中,->init()
如果无法读取或解析网址,则会返回false,因此您可能会这样做:
if (! $feed->init()) {
// log your error, "return false" or handle the failure some other way
}
根据我对simplepie\library\SimplePie.php
的阅读,它不会产生任何例外情况,这就是为什么Try / Catch无法正常工作。
答案 1 :(得分:0)
这可能不是内置于SimplePie中,但在您的调用PHP中,您可以使用try / catch块:
try {
$this->feed->init();
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
虽然取决于错误,但这可能也不起作用。