如何让SimplePie在无效的Feed上优雅地失败?

时间:2013-05-29 02:15:44

标签: simplepie

我正在尝试让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中的机制让我看看我是否有一个有效的反馈,所以如果我不这样做,我会优雅地失败?

2 个答案:

答案 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";
}

虽然取决于错误,但这可能也不起作用。