2013-05-29 20 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() 

我已經通過的文件看,我可以什麼都看不到驗證。我確實看到了有關錯誤檢查的頁面(http://simplepie.org/wiki/reference/simplepie/error),但只有當URL完全無效並且無法加載時纔有效。在URL返回404或其他非有效提要的情況下,$ feed-> error爲空。

SimplePie中沒有內置一些機制讓我看看我是否得到了有效的反饋,所以如果我沒有得到正確的反饋,我可以優雅地失敗?

+0

您是否使用SimplePie的最新版本? – Revent

+0

是的,我在1.3.1,這是最新和最偉大的。 – dvanhook

回答

0

,這可能不是內置到了SimplePie,但在你調用PHP,你可以使用try/catch塊:

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

雖然取決於錯誤,這可能不能工作。

+0

嗯,我會檢查並回復你。 – dvanhook

+0

是的,對不起,這也沒有得到它。仍然收到致命的錯誤。 – dvanhook

+0

嗯,可能是SimplePie中的一個bug。如果你勇敢,你可以嘗試追蹤失敗的位置並修復錯誤。 – Revent

1

在1.3.1了SimplePie,->init()將返回false,如果它不能讀取或解析URL,所以你可以這樣做:

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

根據我的simplepie\library\SimplePie.php閱讀,它不會產生任何異常,這就是爲什麼Try/Catch不起作用。