サンプル・プログラムの実行例
サンプル・プログラム
| url_exists.php | サンプル・プログラム本体。 |
| pahooInputData.php | データ入力に関わる関数群。 使い方は「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。 |
| バージョン | 更新日 | 内容 |
|---|---|---|
| 1.1.1 | 2025/11/23 | PHP8.5対応:curl_closeを使わない |
| 1.1 | 2021/04/24 | PHP8対応,リファラ・チェック改良 |
| 1.0 | 2009/08/14 | 初版 |
| バージョン | 更新日 | 内容 |
|---|---|---|
| 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: }
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: }
HTTPステータスが200番台または300番台であれば、何らかの形でページは存在する。それ以外であれば FALSE を返す。
参考サイト
- HTTP レスポンスステータスコード:MSDN web docs
- PHPでURL上のコンテンツを読み込む:ぱふぅ家のホームページ

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