[PHP]HTTPステータスコードを取得する

Read More

PHPでHTTPステータスコードを取得する方法。


サーバにページリクエストを送るとヘッダー情報としてHTTPステータスコードを返してくる。

代表的なHTTPステータスコードは以下のようなものがある。

■ステータスコードとその意味
・200:OK
成功。正常にコンテンツの読み込みを完了。
再現方法:普通にコンテンツを読む。

・403:Client Error Forbidden
サーバが「読み出し禁止」にしているコンテンツをブラウザが読もうとした。
再現方法:FTPで READパーミッションを外したコンテンツを読みこむ。
又は、フォルダの一覧を出さない設定にしておいてindex.htm や default.htmのない状態でスラッシュエンドのURLを叩く。

・404:Client Error Not Found
指定されたURLは存在しない。
再現方法:存在しないURLを呼び出すと再現。ただしドメインは正しくないといけない。

・503:Server Error Service Unavailable
過負荷などでリクエストが実行できない。
再現方法:負荷をかけて出るかどうかを調べる、わけにはいかない。



昔にブックマークしたページなんかを久しぶりに開くと404ページが表示されたりすることがある。

これ、内部的には404ページを表示するより先にブラウザが404ってステータスコードを受け取ってて
この値をGoogle先生なんかは利用してたりする(たぶん)。

なので正しいヘッダー情報を返していないとGoogleに404ページがサムネイル登録されたりする。


上記以外にも色んなステータスコードがあるので気になる方はご自分で。



--
さて本題。


PHP関数は以下のようになる。

■HTTPステータスコードを取得する関数
<?php
/**
 * HTTPステータスコードを取得する
 * 
 * 正常な場合は200が返却され、異常な場合はそのステータスが、
 * そして存在しないURLの場合は返ってくる値はnullとなる。
 *
 * @param string $url
 * @return mixed $header status code or null
 */
function getStatusCode($url) {
 $header = null;
 $options = array(
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HEADER         => true,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_ENCODING       => "",
  CURLOPT_USERAGENT      => "spider",
  CURLOPT_SSL_VERIFYPEER => false,
  CURLOPT_SSL_VERIFYHOST => false,
  CURLOPT_AUTOREFERER    => true,
  CURLOPT_CONNECTTIMEOUT => 120,
  CURLOPT_TIMEOUT        => 120,
  CURLOPT_MAXREDIRS      => 10,
 );
 $ch = curl_init($url);
 curl_setopt_array($ch, $options);
 $content = curl_exec($ch);
 
 if(!curl_errno($ch)) {
  $header = curl_getinfo($ch);
 }// end if
 curl_close($ch);
 return $header['http_code'];
}// end function

echo(getStatusCode('http://xirasaya.com'));
?>


■実行結果
> 200



HTTPステータスコードとはあくまでもサーバに問い合わせた結果として返される値なので、
問い合わせ先のサーバが無いとステータスコードが取得できない。

ゆえにこの場合の戻り値はnullを返すようにしている。


--
この関数は色々な所で活用できる。

よそ様へのリンク先ページの存在確認や、自分のサーバの死活管理など。


まあ頻繁にやるとDoS攻撃になりかねないのでそこんとこの注意は必要。