• 089月

    少し前に、ブログのサイドメニューに、RSS更新情報や、はてなアンテナを
    表示するようにしたのですが、どうも今晩は「はてなアンテナ」の調子が
    おかしいようで、うちのブログの表示自体も遅くなってしまっていました。

    そこで、一旦、再度メニューの表示をオフにして、タイムアウトの処理を
    組み込むことに。

    ただ、RSSの処理部分は既存の関数を利用していますので、事前にファイル
    チェックをおこなう処理を別個に入れることにしました。

    $server = “a.hatena.ne.jp”;
    define(“TIMEOUT_SECOND”, 1);
    $fp = @fsockopen($server, 80, $errno, $errstr, TIMEOUT_SECOND);
    if ( !$fp ) {
      //タイムアウトエラー
      $rss = “”;
      return $rss;
    }
    else {
      fwrite($fp, “GET http://”.$server.”/macbs/rss HTTP/1.0\r\n\r\n”);
      stream_set_blocking( $fp, TRUE );
      stream_set_timeout($fp, TIMEOUT_SECOND);
      $info = stream_get_meta_data($fp);

      $txt .= fgets($fp, 2000);
      $info = stream_get_meta_data($fp);
      fclose($fp);

      if ( $info[‘timed_out’] ) {
        //タイムアウトエラー
        $rss = “”;
        return $rss;
      }
    }

    まぁ、内容は見ての通り(^^;ということで、とりあえずオープンしてみて、
    ちらっと読んでタイムアウトだったら、処理をやめるという具合です。

    PHPのバージョンが新しければ、fopenで処理できるのですが、fsockopenを
    使ったので、ちょっとややこしくなりました。

    はてなアンテナが復旧してくれるのが一番ですが、こういうことは
    他のRSSでもありうる問題ですし、この機会に対処できて良かったです。

    PHP 逆引きレシピ (PROGRAMMER’S RECiPE) PHP 逆引きレシピ (PROGRAMMER’S RECiPE)

    by G-Tools

    関連エントリー:

    Filed under: Blog
    2009/09/08 10:59 pm | PHPでタイムアウト処理 はコメントを受け付けていません。

Comments are closed.