PHPでURLの存在チェック

(1/1)
PHPで cURL(Client URL Library)を用いて URLの存在チェックを行うプログラムを作る。関数  file_exists  と異なり、HTTPステータスを取得することができる。

サンプル・プログラムの実行例

PHPでURLの存在チェック

目次

サンプル・プログラム

圧縮ファイルの内容
url_exists.phpサンプル・プログラム本体。

解説:HTTPステータスを取得する

 126: /**
 127:  * HTTPステータスを取得する
 128:  * @param   string $url 対象URL
 129:  * @return  list(int 番号/FALSE, string メッセージ)
 130: */
 131: function getHTTPstatus($url) {
 132:     $curl = curl_init();
 133:     curl_setopt($curl, CURLOPT_URL, $url);
 134:     curl_setopt($curl, CURLOPT_HEADER, TRUE);
 135:     curl_setopt($curl, CURLOPT_NOBODY, TRUE);
 136:     curl_setopt($curl, CURLOPT_SSL_VERIFYPEER , FALSE);     //証明書は無視
 137:     curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);       //結果を文字列で
 138:     curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);       //結果を文字列で
 139:     $data = curl_exec($curl);
 140:     curl_close($curl);
 141: 
 142:     $n = preg_match("/^(HTTP\/[0-9\.]+) ([0-9]+) (.+)/i", $data, $arr);
 143: 
 144:     if (! isset($arr[2]))   $arr[2] = FALSE;
 145:     if (! isset($arr[3]))   $arr[3] = '';
 146:     $res = array((int)$arr[2], (string)$arr[3]);
 147: 
 148:     return $res;
 149: }

ユーザー関数 getHTTPstatus は、クライアント(ブラウザ)がURLを要求した場合、そのドメインが存在していれば、HTTPステータスと呼ばれるコード番号を返す。通常は 200 だが、ページが見つからないと 404 などが返される。

PHPでは cURLライブラリを利用することで、HTTP ステータスを取得することができる。
これを行っているのがユーザー関数 getHTTPstatus である。
関数  curl_init  によって cURL ライブラリの使用を宣言し、関数  curl_setopt  にパラメータを格納し、関数  curl_exec  で実行する。
戻り値として HTTP レスポンスが代入されるので、関数  preg_match  を利用してHTTPステータスを抜き出す。

解説:URLの存在チェック

 151: /**
 152:  * URLの存在チェック
 153:  * @param   string $url チェックするURL
 154:  * @return  bool TRUE/FALSE
 155: */
 156: function url_exists($url) {
 157:     list($num, $msg) = getHTTPstatus($url);
 158:     $res = FALSE;
 159: 
 160:     //HTTPステータスが 200~300番台なら成功
 161:     if (($num >200&& ($num < 400))   $res = TRUE;
 162: 
 163:     return $res;
 164: }

ユーザー関数 url_exists は、前述のユーザー関数 getHTTPstatus の戻り値、すなわち HTTPステータスを見て、URLの存在をチェックする。
HTTPステータスが200番台または300番台であれば、何らかの形でページは存在する。それ以外であれば FALSE を返す。

参考サイト

(この項おわり)
header