4

如果我提供的其中一个提要结果不可用或无效(由于提要提供商端的服务器问题),我正在尝试让 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() 

我查看了文档,但看不到任何有关验证的信息。我确实看到了这个关于错误检查的页面(http://simplepie.org/wiki/reference/simplepie/error),但只有在 URL 完全无效并且无法加载时才真正有效。在 URL 返回 404 或其他不是有效提要的情况下,$feed->error 为空白。

是不是 SimplePie 内置了一些机制来让我查看我是否得到了有效的反馈,所以如果我没有,我可以优雅地失败?

4

2 回答 2

2

在 SimplePie 1.3.1 中,->init()如果无法读取或解析 URL,将返回 false,因此您可以这样做:

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

根据我对 的阅读 simplepie\library\SimplePie.php,它不会产生任何异常,这就是 Try/Catch 不起作用的原因。

于 2015-12-15T00:18:01.723 回答
0

This may not be built into SimplePie, but in your calling PHP you could use a try/catch block:

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

Although depending on the error, this might not work either.

于 2013-05-29T19:43:57.933 回答