- ベストアンサー
システムエラーの回避法とタイムアウトを早める方法
ブログのRSSを取得し最新5件の記事タイトルを取得するスクリプトを作りました。 スクリプト自体は問題なく動いているのですが、RSSを発行しているサイトがダウンした場合にちょっと困った事が… 問題1:タイムアウトが長すぎる スクリプトは2回読んでいて、RSSのサーバーがダウンしている場合、タイムアウトしないと画面が表示されません。 タイムアウトが返って来るまでの時間は約6分です。 試しにfsockopenというのを使用してタイムアウトを5秒に設定したところ、タイムアウトは2分まで短縮されました。 タイムアウトが上手く動かないのは一体何故でしょうか? 10秒くらいで接続できなかったらタイムアウトさせて画面を全て表示させたいのですが、どうすればよいのでしょうか。 問題2:エラーを回避させてもシステムエラーになる。 システムエラーがあった場合、システムエラーの画面に飛ぶようになっています。 上記のブログでタイムアウトした場合、システムエラーとなり通常のページが表示されません。 関数に@をつけるとエラーメッセージは表示されないと教えていただきましたが、メッセージが表示されないだけでエラーには変わりありませんでした。 システムエラーとして認識させないためにはどうすればよいでしょうか? 現在のソースはこんな感じです。 $fp = fsockopen("www.hoge.jp", 5); if(!$fp) { return "タイムアウト\n"; } else { //RSSの読み込み処理 } アドバイスお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
先ほどは触れるのを忘れていたのですが、fsockopen関数は正常にタイムアウトの設定が働いてないのかな、って思ってます。 以前、別なアプリケーションでfsockopenを使ってました。STMPのプロセスを書いていたのですが、ごく稀に相手から何の反応も帰ってこない事がありました。このスクリプトは元々処理時間が掛かるのでスクリプト自体の時間制限もナシにしていたので、fsockopenが無反応になる時は、エラーが出るどころか、永遠に処理が戻ってこないという状況でした。色々と設定を変えたりしてもダメだったので、そういうものだと思っていました。
その他の回答 (2)
- wakame0729
- ベストアンサー率32% (245/765)
うちでもRSSリーダーを作ってますが、これにXMLDOMを使ってます。ファイルからの読み込みは@domxml_open_file関数を使っていますが、もし読み込み先が存在しない場合は単なる空欄で表示されます。この時でも、ページ自体の表示に特別時間がかかっている訳ではないみたいなので、タイムアウトは今まで意識した事はありませんでした。
お礼
ありがとうございます。 タイムアウトが異様に長いのは私の書き方の問題のような気がしてきました。 アドバイスと教えていただいたページを参考にまた改造してみようと思います。
- ketaimania
- ベストアンサー率39% (9/23)
ICMPでまずドメインの動作確認 まずはピン打ちが基本 > システムエラーがあった場合、システムエラーの画面に飛ぶようになっています。 エラーハンドリングされているって事? 誰がしてるの?
お礼
ありがとうございます。 参考にさせていただきます。
補足
システムエラーに関してはほぼ解決しました。
お礼
再びありがとうございます。 fsockopenに関してですが、書き方を間違っている事に気付きました。 今確認できる状態ではないのですが、確認できる状態になったら再度テストしてみようと思います。
補足
やはりfsockopen関数がおかしかったようです。 アドバイスいただきありがとうございました^^