MacBSの日常生活的日記

PHPでタイムアウト処理

少し前に、ブログのサイドメニューに、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)

by G-Tools
モバイルバージョンを終了