0

基本上,我们有这个模块,我们提供给想要在他们的页面上包含来自其他地方的提要的用户。我工作得很好,没有汗水。问题是每当用户错误地处理他们手上的提要链接时,我们必须手动删除该模块,因为 Zend 提要崩溃并烧毁整个页面,就像任何致命错误一样。通常,人们会期望一个代码块,例如..

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”或“What the shit”之类的话会表现得很好。不,它死了。它崩溃并死亡。它崩溃、燃烧和死亡,完全无视那里所有快乐的尝试方法。

所以基本上,我们是否必须在 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 ....
4

3 回答 3

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没有问题,所以不会抛出-related Exception。Zend_Feed

您在这里遇到的问题是另一个问题,例如错误的 URL:它无法获取数据,并且没有分析它;它解释了为什么异常不是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;
}

这边走 :

  • 如果提要无效,您可以告诉用户
  • 如果有 HTTP 相关的问题,你也可以告诉用户
  • 如果还有其他你没有想到的问题,它仍然不会崩溃
于 2009-07-28T10:48:24.973 回答
1

怎么样?

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

?

于 2009-07-28T10:19:59.883 回答
0

嘿,你没有捕捉到正确的异常类型尝试捕捉

Zend_Http_Client_Adapter_Exception

或一次全部:

捕获(异常 $e)

顺便说一句,它有一个 toString 方法,所以你可以直接回显 $e 而无需 getMessages。

于 2009-07-29T07:04:49.637 回答