• ベストアンサー

システムエラーの回避法とタイムアウトを早める方法

ブログのRSSを取得し最新5件の記事タイトルを取得するスクリプトを作りました。 スクリプト自体は問題なく動いているのですが、RSSを発行しているサイトがダウンした場合にちょっと困った事が… 問題1:タイムアウトが長すぎる スクリプトは2回読んでいて、RSSのサーバーがダウンしている場合、タイムアウトしないと画面が表示されません。 タイムアウトが返って来るまでの時間は約6分です。 試しにfsockopenというのを使用してタイムアウトを5秒に設定したところ、タイムアウトは2分まで短縮されました。 タイムアウトが上手く動かないのは一体何故でしょうか? 10秒くらいで接続できなかったらタイムアウトさせて画面を全て表示させたいのですが、どうすればよいのでしょうか。 問題2:エラーを回避させてもシステムエラーになる。 システムエラーがあった場合、システムエラーの画面に飛ぶようになっています。 上記のブログでタイムアウトした場合、システムエラーとなり通常のページが表示されません。 関数に@をつけるとエラーメッセージは表示されないと教えていただきましたが、メッセージが表示されないだけでエラーには変わりありませんでした。 システムエラーとして認識させないためにはどうすればよいでしょうか? 現在のソースはこんな感じです。 $fp = fsockopen("www.hoge.jp", 5); if(!$fp) {  return "タイムアウト\n"; } else {  //RSSの読み込み処理 } アドバイスお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

先ほどは触れるのを忘れていたのですが、fsockopen関数は正常にタイムアウトの設定が働いてないのかな、って思ってます。 以前、別なアプリケーションでfsockopenを使ってました。STMPのプロセスを書いていたのですが、ごく稀に相手から何の反応も帰ってこない事がありました。このスクリプトは元々処理時間が掛かるのでスクリプト自体の時間制限もナシにしていたので、fsockopenが無反応になる時は、エラーが出るどころか、永遠に処理が戻ってこないという状況でした。色々と設定を変えたりしてもダメだったので、そういうものだと思っていました。

kamay
質問者

お礼

再びありがとうございます。 fsockopenに関してですが、書き方を間違っている事に気付きました。 今確認できる状態ではないのですが、確認できる状態になったら再度テストしてみようと思います。

kamay
質問者

補足

やはりfsockopen関数がおかしかったようです。 アドバイスいただきありがとうございました^^

その他の回答 (2)

回答No.2

うちでもRSSリーダーを作ってますが、これにXMLDOMを使ってます。ファイルからの読み込みは@domxml_open_file関数を使っていますが、もし読み込み先が存在しない場合は単なる空欄で表示されます。この時でも、ページ自体の表示に特別時間がかかっている訳ではないみたいなので、タイムアウトは今まで意識した事はありませんでした。

参考URL:
http://jp2.php.net/manual/ja/ref.domxml.php
kamay
質問者

お礼

ありがとうございます。 タイムアウトが異様に長いのは私の書き方の問題のような気がしてきました。 アドバイスと教えていただいたページを参考にまた改造してみようと思います。

回答No.1

ICMPでまずドメインの動作確認 まずはピン打ちが基本 > システムエラーがあった場合、システムエラーの画面に飛ぶようになっています。 エラーハンドリングされているって事? 誰がしてるの?

kamay
質問者

お礼

ありがとうございます。 参考にさせていただきます。

kamay
質問者

補足

システムエラーに関してはほぼ解決しました。

関連するQ&A