[PHP-users 1957] WEBサーバーのレスポンスを得る

鮫川 将人 php-users@php.gr.jp
Mon, 10 Sep 2001 01:52:22 +0900


こんばんは。鮫川@アシェットです。

今、DB上に記録してあるURLを順次取り出して、デッドリンクになっていないかどう
か(そのページがなくなっていないかどうか)を調べるPHPプログラムを作成しており
ます。

fsockopenでサーバへコネクトして、HEADコマンドを送信し、帰ってきたレスポンス
に404や403が含まれていればエラーということをしているのですが...

いくつかのURLについては、IEでそのURLを入力すると表示されるにもかかわらず、
PHPで取り出したレスポンスは 404 not fount となってしまいます。試しにtelnetで
そのURLの80番ポートに接続して同じことをしてみたのですが、結果は同じでエラー
が返ってきました。このようなレスポンスだと、そのURLがなくなったものとして扱
われてしまうので困っております。

本質的には、PHPではない話題かも知れませんが、この現象の原因や代替方法を御存
知の方がいらしたら御教示いただければ幸いです。

環境は...
RedHatLinux6.2E
Apache 1.3.17
php-3.0.18-i18n-2
PostgreSQL 6.5.3
です。

また、そのスクリプトのレスポンスヘッダを得る部分も掲載しておきます。ちなみ
に、接続先ホスト名やリクエストに含めるファイル名等が正しいことは確認済みで
す。

======スクリプト抜粋ここから=====
  $fp = fsockopen($this->ChoppedDomain, 80, &$errno, &$errstr, 60);

  // Step3-2. サーバーからのヘッダレスポンスを得る
  if (!$fp){
   $this->Err = "サーバーに接続できませんでした<br>$errstr($errno)";
   return true;
  }
  else{
   fputs($fp, "HEAD " . $this->ChoppedDir . " HTTP/1.0\n\n");

   while(!feof($fp))
    $responce .= fgets($fp, 128);
   fclose($fp);
  }
======スクリプト抜粋ここまで=====

宜しく御願い致します。