基本上,我们在这里提供了这个模块,我们为希望在其网页上的其他地方添加Feed的用户提供这个模块。我工作很好,没有汗水。问题是,每当用户误操作他们手上的Feed链接时,我们必须手动删除该模块,因为Zend Feed崩溃并像任何致命错误一样烧毁整个页面。通常,人们会期望代码块如..
try { // Test piece straight off the Zend tutorial
$slashdotRss = Zend_Feed::import('http://rss.slashdot.org/Slashdot/slashdot');
} catch (Zend_Feed_Exception $e) {
// feed import failed
echo "Exception caught importing feed: {$e->getMessage()}\n";
exit;
}
..如果我输入'httn://rss.grrllarrrlll.aarrg/Slashdot/slashdot'并说出“404”或“什么狗屎”的话,那就太大了。不,它死了。它崩溃并死亡。它崩溃,烧伤和死亡,完全无视那里所有快乐的trycatch方法。
所以基本上,我们是否必须编写我们的feedfetch或者Zend的滑动是否有任何简单的补救措施?
添加了日志:
exception 'Zend_Http_Client_Adapter_Exception' with message 'Unable to Connect to tcp://www.barglllrragglll:80. Error #10946: ' in /library/Zend/Http/Client/Adapter/Socket.php:148
#0 /library/Zend/Http/Client.php(827): Zend_Http_Client_Adapter_Socket->connect('www.barglllrragglll...', 80, false)
#1 /library/Zend/Feed.php(284): Zend_Http_Client->request()
...... Trace etc ....
答案 0 :(得分:2)
出于好奇,您是否尝试捕捉其他类型的异常?即,不仅Zend_Feed_Exception
?
也许,如果在“抓取”阶段出现某种404错误,它会引发另一个异常吗? (因为依赖于另一个组件,如Zend_Http_Client
?)
另外,您是否检查了error_reporting
级别,以确定会报告错误?如果display_errors
是Off
,可能在某处的某个日志文件中?
作为一个不支持,而不是真正回答你的问题,但是Zend_Feed
有一些缺点(比如根据提要的格式返回不同类型的数据 - 例如RSS与ATOM)
从Zend Framework 1.9 开始(目前,它仅作为预览或alpha版本提供,因此不要在生产中使用它!),将有一个Zend_Feed_Reader
组件,在完成RSS和ATOM Feed的使用时应该更有用。
有关更多信息,请参阅
添加日志后进行编辑
对于Zend_Feed
,Feed 本身没有问题,因此它不会引发与Zend_Feed
相关的异常。
你在这里遇到的问题是另一个问题,比如错误的网址:它无法获取数据,也没有分析数据;它解释了为什么异常不是Zend_Feed
- 相关的,而是Zend_Http_Client
- 相关的。
您可能想要添加一些其他异常处理代码;像这样的东西:
try { // Test piece straight off the Zend tutorial
$slashdotRss = Zend_Feed::import('http://rss.slashdot.org/Slashdot/slashdot');
} catch (Zend_Feed_Exception $e) {
// feed import failed
echo "Exception caught importing feed: {$e->getMessage()}\n";
exit;
} catch (Zend_Http_Client_Exception $e) {
echo "There is something wrong with the URL you provided for the feed";
exit;
} catch (Exception $e) {
echo "There is something wrong, we don't know what...";
exit;
}
这样:
答案 1 :(得分:1)
答案 2 :(得分:0)
嘿,你没有抓住正确的异常类型试图抓住
Zend_Http_Client_Adapter_Exception
或一次性全部:
catch(Exception $ e)
顺便说一下,它有一个toString方法,所以你可以回复$ e,不需要getMessages。