PHPでURLの存在チェック

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

(2025年11月29日)PHP8.5対応:curl_closeを使わない.

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

PHPでURLの存在チェック

目次

サンプル・プログラム

圧縮ファイルの内容
url_exists.phpサンプル・プログラム本体。
pahooInputData.phpデータ入力に関わる関数群。
使い方は「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。
url_exists.php 更新履歴
バージョン 更新日 内容
1.1.1 2025/11/23 PHP8.5対応:curl_closeを使わない
1.1 2021/04/24 PHP8対応,リファラ・チェック改良
1.0 2009/08/14 初版
pahooInputData.php 更新履歴
バージョン 更新日 内容
2.0.1 2025/08/11 getParam() bug-fix
2.0.0 2025/08/11 pahooLoadEnv() 追加
1.9.0 2025/07/26 getParam() 引数に$trim追加
1.8.1 2025/03/15 validRegexPattern() debug
1.8.0 2024/11/12 validRegexPattern() 追加

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

url_exists.php

 123: /**
 124:  * HTTPステータスを取得する
 125:  * @param   string $url 対象URL
 126:  * @return  list(int 番号/FALSE, string メッセージ)
 127: */
 128: function getHTTPstatus($url) {
 129:     $curl = curl_init();
 130:     curl_setopt($curl, CURLOPT_URL, $url);
 131:     curl_setopt($curl, CURLOPT_HEADER, TRUE);
 132:     curl_setopt($curl, CURLOPT_NOBODY, TRUE);
 133:     curl_setopt($curl, CURLOPT_SSL_VERIFYPEER , FALSE);     // 証明書は無視
 134:     curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);       // 結果を文字列で
 135:     curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);       // 結果を文字列で
 136:     $data = curl_exec($curl);
 137:     // PHP8.5:非推奨関数
 138:     if (PHP_VERSION_ID < 80500) {
 139:         curl_close($curl);
 140:     }
 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  で実行する。
なお、PHP 8.5 において  curl_close  関数が非推奨(実行しても作用しなくなった)になったため、グローバル定数 PHP_VERSION_ID を参照し、PHP 8.5 以上では実行しないようにしました。

戻り値として HTTP レスポンスが代入されるので、関数  preg_match  を利用してHTTPステータスを抜き出す。

解説:URLの存在チェック

url_exists.php

 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