【PHP】存在するページ(URL)か確認

公開日:
更新日:
カテゴリー: PHP

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関数の詳細はこちらを参照して下さい。

 

あわせて読んでほしい!

 

コメント

まだコメントはありません。

コメントフォーム
お名前
コメント