PHPで外部のURLが存在するかチェックする簡単な方法

PHPで外部のURLが存在しているのか調べたいときってありますよね。

その場合は file_exists  などの関数は内部専用なので使えません。

そこでここでは外部のURLの存在チェックすることができる方法について紹介します。

存在チェックにはレスポンスコードを使うのが簡単

PHPで外部URLの存在チェックができる関数があればいいんですが、残念ながらありません。

ライブラリでそういう関数があるかもしれませんが、ここでは純粋なPHPでチェックがしたいです。

そこで手軽にURLチェックに使えるのがステータスコード

 

「ステータスコードって何?」という人に説明しておくと

サーバーから返ってくるレスポンス(応答)の状態を表す3桁の数字

のことをステータスコードを読んでます。

よく聞く「404 not found」とかもステータスコードの一種です。

 

それでこのコードは100区切りで100番代から500番代まで次のように分類できます。

  • 100番代(1xx)
    リクエストが受け取られたときに返ってくるコード
  • 200番代(2xx)
    リクエストが受け取られ正しく処理されたときに返ってくるコード
    ブラウザで正しくページが表示される場合は大体 200 が返ってくる
  • 300番代(3xx)
    リダイレクトとかの追加の処理が必要な時に返ってくるコード
  • 400番代(4xx)
    ブラウザなどのクライアントから変なリクエストがあった時に返されるコード
    有名なのは存在しないページにアクセスしたときの「404 Not Found」
  • 500番代(5xx)
    サーバーがリクエストの処理に失敗したときに返ってくるコード
    例えばサーバーダウンしてページが見れなかったりなどした場合

この5種類に分けられています。

この内でページが存在する場合に返ってくるのは200~300番代のコード

 

なのでページの存在チェックにはステータスコードが200~300の範囲内化調べればOK

では具体的なコード例について次で紹介します。

URLの存在チェックをするPHPコード

そのPHPコードというのがこちら

まずget_headers関数でヘッダー情報を連想配列として全て取得

そしてその連想配列の1番目(  headers[0]  )にステータスコードが含まれています。

なのでその中に 200 ~ 300 までの数字が含まれているか正規表現を使って  preg_match  で調べることでURLの存在チェックを行うことが可能です。

 

実際は次のように関数化すれば便利

URLがそんざいしていれば  treu  、存在していないあるいは不正な場合は false  が返ってきます。

 

ということでURLの存在チェックをする方法についてでした。

PHPには外部URLについては file_exits  が使えないので注意です。

ではでは($・・)/~~~

PHP

Commentsこの記事についたコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください