为什么我没有在Feed中错误输入Zend Feed时遇到的异常?

时间:2009-07-28 09:59:16

标签: php zend-framework zend-feed

基本上,我们在这里提供了这个模块,我们为希望在其网页上的其他地方添加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 ....

3 个答案:

答案 0 :(得分:2)

出于好奇,您是否尝试捕捉其他类型的异常?即,不仅Zend_Feed_Exception

也许,如果在“抓取”阶段出现某种404错误,它会引发另一个异常吗? (因为依赖于另一个组件,如Zend_Http_Client?)

另外,您是否检查了error_reporting级别,以确定会报告错误?如果display_errorsOff,可能在某处的某个日志文件中?


作为一个不支持,而不是真正回答你的问题,但是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;
}

这样:

  • 如果Feed无效,您可以告诉用户
  • 如果存在与HTTP相关的问题,您也可以告诉用户
  • 如果您没有考虑其他问题,它仍然不会崩溃

答案 1 :(得分:1)

的内容如何

$file = file("http://rss.grrrrrrrl..."); $rss = Zend_Feed::importString($file);

答案 2 :(得分:0)

嘿,你没有抓住正确的异常类型试图抓住

  

Zend_Http_Client_Adapter_Exception

或一次性全部:

  

catch(Exception $ e)

顺便说一下,它有一个toString方法,所以你可以回复$ e,不需要getMessages。