• ベストアンサー
  • すぐに回答を!

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

ブログの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
  • 閲覧数288
  • ありがとう数4

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

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

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

質問者からの補足

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

関連するQ&A

  • タイムアウトの場合のエラー回避

    ブログのRSSを読み込んで最新5件を表示するPHPをサイトに組み込みました。 ファイルはincludeを使用して読み込んでいるのですが、ブログサイトがダウンした場合などに長時間画面が表示されない状態になってしまいます。 タイムアウト後はエラーメッセージが表示され、それ以降の画面が真っ白になってしまいます。 これを、ブログサイトのRSSが呼び出せない状態になったら「現在ブログサイトがダウンしています」というメッセージを出力して、エラーにしないという方法はありませんか? 画面の表示がおかしくなるのはとても困るので、なんとかしたいのです。 アドバイスお願いします。

    • 締切済み
    • PHP
  • alarmのタイムアウト後の処理でスクリプトを止めない方法をご教授ください

    はじめまして。 現在perlで簡単なRSSリーダーを作っています。 簡単に書けば下記のようなスクリプトです。 use LWP::Simple; use XML::RSS; foreach(@hoge) { # @hogeはrssファイルのURL $SIG{ALRM} = sub{ die("alarm_error"); }; alarm 10; $rss->parse($_); alarm 0; } rssファイルをとりにいって10秒たって取得できなければnextで次のrssファイルへという形にしたいのですがどうもやり方がわかりません。 いろんなところで調べてもタイムアウト後はdie等によって強制終了するやり方しか見つかりませんでした。 タイムアウト後nextを使えるやり方をご存知のかたおられたらお教えください。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • 503エラーを回避したい

    先日、RSSを取得し、表示するPHPサイトを作ったのですが、アクセスのピーク時間になると503エラーが出ます。 アクセス数が原因?と思うのですが、対策方法がよく分かりません。原因もよくわかっていません。 最大アクセス数は[5000PV/1時間]程度です。 さくらのレンタルサーバ「ライトプラン」を使用しています。 ディスクの使用量[30MB / 1000MB(3%)] ウェブ転送量[548.6 MB(昨日)] エラーを回避したいのですがどうすればいいのでしょう? よろしくお願いします。

    • ベストアンサー
    • PHP

その他の回答 (2)

  • 回答No.2

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

参考URL:
http://jp2.php.net/manual/ja/ref.domxml.php

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

  • 回答No.1

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

質問者からの補足

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

関連するQ&A

  • ODBCタイムアウトエラー

    WindowsXP環境でACCESS2003を使用して、ODBCリンクでSQL SERVER2005に接続し、データーを取得後ローカルテーブルにデーターを置く処理を作って運用していたのですが、 Windows7でACCESS2003に移行し、システム内容は変更していないのですが Windows7になってリンクテーブルを開くと「ODBC タイムアウトエラー」が発生します。 WindowsXPのときはタイムアウトが出ずに1分くらいで結果が返ってきます。 多分、SQL SERVER ドライバーの影響と思うのですが分かりません。 どなたか教えてください。 Windows7 SQLSERVER(ODBC)ドライバー バージョン:6.01.7601.17514 windowsXP ドライバー バージョン:200.85.1132.00

  • セッションタイムアウトエラー

    いつも参考にしております。 セッションタイムアウトのエラー(???)で困ってます。 ご存知の方がいらっしゃいましたら、ご教授お願いします。 環境: OS :Windows 2009 Sever ActivePerl : V5.8.9 Webサーバ :IISv7.0 CGI::Session.pm:v4.41 DB :Oracle 10g 詳細は下記のようです。 1.ログイン成功したら、セッションを作成します。 CGI::Session->name( "SID" ); my $session = new CGI::Session( "driver:File", undef, {Directory => 'C:/Inetpub/wwwroot/xxx/tmp/session'} ); $session->expire( '+10h' ); ...省略 2.上記で作成されたセッションIDを画面に保持し、画面遷移する際に セッションIDの存在チェックを行う my $session = CGI::Session -> new( undef, $sid, {Directory => 'C:/Inetpub/wwwroot/xxx/tmp/session'} ); if($sid eq $session -> id) { // セッションID存在する // 次の画面遷移する // セッションタイムアウト再設定 $session->expire( '+10h' ); } else { // セッションID存在しない $session->close; $session->delete; // 作成されたセッションファイルを削除 // エラー画面表示 } 現象: セッションタイムアウトの設定時間に経ってないにもかかわらず たまたまセッションタイムエラーが発生します。 P.S エラーの原因が特定できず、困ってます。 以上、宜しくお願いいたします

    • 締切済み
    • CGI
  • はてな以外でやる方法

    http://hatenadiary.g.hatena.ne.jp/keyword/RSSを使った最新情報を表示する(rssモジュール) はてなにこんな機能があります。 RSSをよみ、最新記事5件のタイトルを表示させ 内容も少し表示させる事ができます。 私のブログははてなではないので もちろんこれは使えません。(Serene Bach使用) ですが、同じような事をしたいのですが、どこかに こんなものってありますでしょうか?

  • デバイス タイムアウト

    PCを立ち上げようとしても、起動中の青い画面上で「タイムアウト期間内に、指定したDeviceHarddisk2DR5でのI/O操作が完了しませんでした」というエラーが表示され、立ち上げることができません。 どうすれば正常に起動できるのでしょうか。 ちなみに、XPを使っています。

  • システムエラー

    先日使用していた、マシンが暑さでダウンしてしまい、システムの一部を壊してしまったようです。OSはWindowsXP(プロフェッショナル)です。 動作概要として。 1)電源を投入する。 2)ユーザを選択しログオンする。 3)エラー表示(プロシジャエントリポイントThunkConnect32がダイナミックリンクライブラリKERNEL32.dllから見つかりませんでした)->OK入力 4)エラーを表示(NvQTWKでエラーが発生した。エントリがありません。NcCplDaemon)->OK入力 5)通常に起きる。 教えてください。 3)、4)で発生しているエラーが出ないようにするには、再インストールする以外に方法はないのでしょうか? お願い致します。

  • システムエラー

    プリンターの画面表示にシステムエラーと出ています。3回電源を切ってみましたが改善されていないようです。どうしたらいいですか? ※OKWAVEより補足:「EPSON社製品」についての質問です。

  • パソコンのエラーが出る事

    最近パソコンの画面を変えようとすると ERROR: fsockopen() /ErrNo:0  という表示と、エラーと云う文字が出てくる事が多くなりました、 もう一度やれば大抵移動するのでさほど困ってはいません 原因は何なのか解る方がおられましたら教えてください 宜しくお願いします。

  • IPアドレスがタイムアウト

    PSPのIPアドレスがタイムアウトになります。 エラー番号は表示無しです。 手動にしても無理で原因不明です。 他のPSPとPS3ではIPアドレス取得できてネット接続できます。 ルーターはバッファロー製のやつです。 誰か原因が解る人お願いします。

  • RSSを記事の上に表示したい

    最近は相互RSSというのが流行ってるみたいですが 購読しているRSSを自分で見るのではなく、自分のブログに表示したいのですがどうすればいいのでしょうか? よく見かけるのがブログの記事の上にRSSがあるヤツです FC2ブログを利用してるのですが、そのような設定は一切ありませんでした 自分のブログに購読しているRSSを表示させるにはどうすればいいのでしょう? 記事のタイトル  ブログ名 という風に5件程表示出来れば嬉しいです

  • fsockopen で allabout のサイトだけ読めない?

    PHP4 を使っているのですが、get_heaers() 関数が搭載されていないので、fsockopen を使って自作しています。下記のような感じになっています。(かなり抜粋) $parts = parse_url($url); $fp = fsockopen($parts["host"], $parts["port"], $errno, $errstr); fputs($fp, $request."\n"); $response = fgets($fp, 1024); fclose($fp); 先日まではこのコードで問題なく動作していたのですが、今日になったら http://allabout.co.jp/ 等 allabout のサイトだけが読み込めなくなってしまいました。fgets がタイムアウトしてしまいます。 ブラウザでアクセスすると問題なく表示されますし、 telnet allabout.co.jp 80 で手動でアクセスしても問題はないようです。 PHPのfgetsが(freadも)タイムアウトしてしまうのですが、どのあたりに問題があるのでしょうか。

    • ベストアンサー
    • PHP