PHPでURLの存在チェック

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

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

PHPでURLの存在チェック

目次

サンプル・プログラム

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

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

0126: /**
0127:  * HTTPステータスを取得する
0128:  * @param string $url 対象URL
0129:  * @return list(int 番号/FALSE, string メッセージ)
0130: */
0131: function getHTTPstatus($url) {
0132:     $curl = curl_init();
0133:     curl_setopt($curlCURLOPT_URL$url);
0134:     curl_setopt($curlCURLOPT_HEADERTRUE);
0135:     curl_setopt($curlCURLOPT_NOBODYTRUE);
0136:     curl_setopt($curlCURLOPT_SSL_VERIFYPEER , FALSE);      //証明書は無視
0137:     curl_setopt($curlCURLOPT_RETURNTRANSFERTRUE);        //結果を文字列で
0138:     curl_setopt($curlCURLOPT_RETURNTRANSFERTRUE);        //結果を文字列で
0139:     $data = curl_exec($curl);
0140:     curl_close($curl);
0141: 
0142:     $n = preg_match("/^(HTTP\/[0-9\.]+) ([0-9]+) (.+)/i", $data$arr);
0143: 
0144:     if (! isset($arr[2]))    $arr[2] = FALSE;
0145:     if (! isset($arr[3]))    $arr[3] = '';
0146:     $res = array((int)$arr[2], (string)$arr[3]);
0147: 
0148:     return $res;
0149: }

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

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

解説:URLの存在チェック

0151: /**
0152:  * URLの存在チェック
0153:  * @param string $url チェックするURL
0154:  * @return bool TRUE/FALSE
0155: */
0156: function url_exists($url) {
0157:     list($num$msg) = getHTTPstatus($url);
0158:     $res = FALSE;
0159: 
0160:     //HTTPステータスが 200~300番台なら成功
0161:     if (($num >= 200) && ($num < 400))  $res = TRUE;
0162: 
0163:     return $res;
0164: }

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

参考サイト

(この項おわり)
header