【PHP】存在するページ(URL)か確認
PHPを使って指定されたページ(URL)が存在するかを確認する方法を紹介します。
1.404エラーを調べる
あるページ(URL)にアクセスした際、そのページが存在しない場合、そのサイトのサーバーから404エラーが返されます。
つまり、PHPでページが存在するかどうかを調べる場合、404エラーが出るかどうかを調べれば良いです。
2.file_get_contents関数を使う
404エラーを調べる正当な方法はHTTPリクエストすることだと思いますが、file_get_contents関数を使えばお手軽です。
file_get_contents("ここにページURL")
この関数は、指定されたファイルが存在する場合、そのファイルにあるデータを全て文字列として取り込む関数です。失敗した場合はFalseを返します。
失敗する場合は大抵が404エラーの場合だと思いますので、404エラーを調べる方法として利用できます。file_get_contentsの詳細はこちら。
3.存在するページ(URL)か確認するPHPプログラム
ということで、file_get_contents関数を使って指定したページが存在するかどうかを確認するプログラムを紹介します。
<?php //URLの指定 $url = "ここにURL"; //指定されたURLのコンテンツを取得する $get_contents = @file_get_contents($url); //取得できたかどうかを判定 if($get_contents){ //取得できたのでページは存在する echo "True"; }else{ //取得できなかったのでページは存在しない echo "False"; } ?>
ポイント
file_get_contentsの前に「@」をつけない場合、404エラー時には
Warning: file_get_contents(http://○○○.com/△△△.html): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/○○○/□□□.php on line 12
というエラー文が表示されます。
注意点
file_get_contents関数がFalseを返す=404エラーとは限りません。
サイトによっては、ファイル取得を拒否する設定がされている場合もあるので、もしFalseとなった場合、実際にブラウザで指定URLにアクセスして確認するようにしてください。
4.処理速度を上げる方法
file_get_contents関数でページの存在を確認するプログラムを紹介しましたが、実はこの方法での実行速度は遅いです。
その理由は、「ページを開く→すべてのデータを取得する」からです。
もし、ページの存在のみを確認するだけでいいなら、「ページを開く→最初のデータのみを取得」すれば処理速度が上がります。
その方法ですが、上のプログラムのfile_get_contents関数の引数部分を次のようにすればよいです。
@file_get_contents($url, NULL, NULL, 1, 1);
※指定されたURLにあるデータの1文字目から1バイトのデータを取り出す
5.別の方法
file_get_contents関数で指定されたページが存在するか確認する方法を紹介しましたが、他の関数を使えばもっとスピーディーに行えます。
私はfile_get_contents関数が好きなのでfile_get_contents関数の方法を紹介しましたが、特にこだわりがなければ次のものを使えば良いと思います。
fopen関数を使う方法
<?php //URLの指定 $url = "ここにURL"; //指定されたURLを読み込みモード(「r」)でオープンする $file_open = @fopen($url, 'r'); //オープンできたかどうかを判定 if($file_open){ //オープンできたのでページは存在する echo "True"; //クローズする fclose($file_open); }else{ //オープンできなかったのでページは存在しない echo "False"; } ?>
※fopen関数の詳細はこちらを参照して下さい。
get_headers関数を使う方法
<?php //URLの指定 $url = "ここにURL"; //指定されたURLにHTTPリクエストを送り、そのレスポンスを取得 $get_header = @get_headers($url); //オープンできたかどうかを判定 if($get_header[0] != "HTTP/1.1 404 Not Found"){ //404エラーではないのでページは存在する echo "True"; //クローズする fclose($file_open); }else{ //404エラーなのでページは存在しない echo "False"; } ?>
※404を調べるためだけにざっくり作ったので、プログラムとしては雑です。
※get_headers関数の詳細はこちらを参照して下さい。
あわせて読んでほしい!
コメント
まだコメントはありません。