2009-07-28 6 views
0

基本的には、私たちがユーザーに提供するこのモジュールは、他の場所のフィードをページに含めることができます。私は素晴らしい、汗をかくことはありません。問題は、Zend Feedが致命的なエラーと同じようにページ全体をクラッシュさせて焼くため、ユーザーがフィードリンクを手で傷つけると、モジュールを手動で削除する必要があることです。通常、1は、このような...フィードが誤って入力されたときに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メゾロジーを完全に無視しています。

基本的に、私たちはフィードフェッチを書く必要がありますか、それともZend's slipに簡単な治療法がありますか?

追加ログ:

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

「クラッシュ」「死ぬ」「燃える」とはどういう意味ですか?エラーメッセージ? –

+0

私たちは致命的なエラーメッセージを引き起こす致命的なエラーメッセージとして機能します。それは、「死ぬ」を加えるというケースの1つです。違いはありません。より大きな正義のためのログを追加しました。 –

答えて

2

他の種類の例外をキャッチしようとしましたか?すなわち、Zend_Feed_Exceptionだけでなく、

フェッチフェーズで何らかの404エラーが発生した場合は、別の例外がスローされますか? (Zend_Http_Clientのような別のコンポーネントを使用しているため)

さらに、エラーが報告されるようにレベルerror_reportingを確認しましたか?おそらく、どこかのログファイルで、display_errorsOffならば? - sidenotとして


ではなく、本当にあなたの質問への答えが、 Zend_Feedは、(例えば、ATOM対RSSフィードのフォーマットに応じて、データの異なる種類を返すように)いくつかの欠点を ています。 Zend Frameworkの1.9 (今、それはプレビューやアルファ版としてのみ利用可能ですので、生産にそれを使用しないでください!)を皮切り

、consummingときに、より有用であるZend_Feed_Readerコンポーネント、があるだろうRSSフィードとATOMフィードの両方。より多くの情報については

、ログ

を追加した後


編集を参照してください

Zend_Feedの場合、Feed 自体には問題ありません。のため、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関連の問題がある場合、あなたはあまりにもユーザーに伝えることができ、ユーザ
  • を伝えることができます
  • あなたが考えていなかった別の問題がある場合は、それはまだ
+0

Nonoでは、エラーの完全なトレースがあり、そのすべてがZend Feed.phpに続いてHTTPクライアントにつながります。このような悪循環の中で、通常はビュー内のページを維持する必要があるtrycatchは無視されます。私がしたいのは、ページ上に何かをレンダリングするのに失敗しないように意図したように黙って失敗させることです(「フィードは見つかりませんでした」)。 ZF 1.9に関しては、おそらくアップグレードするのに良い時期になるでしょう。私たちは少し後ろにいます.1.5で(1998年のような感じですが)、その後のバージョンでリリースされた機能はほとんど私たちのために必要でした。 –

+0

ああ、くそー! 何らかの理由で、実行中のコピーで実際にフィード例外が発生するだけでした。素晴らしい、今は猫のように滑らかに走っている。助けてくれてありがとう! –

+0

OK :-)まあ、一般的なキャッチ(Exception $ e)で十分でしょう。^^ –

1

どう

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

の線に沿って何かでしょうか?

+0

有効なslashdotアドレスで試してみました。私の頭の中で怒っている声が聞こえました: "フィードをインポートすると例外が発生しました:DOMDocumentはXMLを解析できません:DOMDocument :: loadXML()解決策であるようです。 –

+0

ああ、ありがとう、しかし。 –

+0

file()は配列を返します。file_get_contents()が必要です。 –

0

ねえ、あなたは右のEXCEPをキャッチされていませんがクラッシュしませんションタイプは、一度に

Zend_Http_Client_Adapter_Exception

またはすべてをキャッチしよう:あなたができるよう

キャッチ(例外の$ e)の

はところでそれはtoStringメソッドを持っていますecho $ e getMessagesは必要ありません。

関連する問題