この記事には広告を含む場合があります。
記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。
別サーバーや S3 にあるファイルの存在をチェックする
PHP にて画像や動画ファイルなどの有無を確認する場合は、file_exists() 関数を使う方が多いと思います。ただファイルの設置先が自分のサーバー内でないときには、file_exists() 関数は使用できません。
外部サーバーにあるファイルの有無の判定方法として良い方法が無いか確認した際に良い方法があったのでご紹介します。
ファイル存在確認を行う方法
PHP にて外部のサーバーにあるファイルの有無確認を行うときは、get_headers() 関数を使うと簡単にチェックすることができます。
扱い易いように関数形式のサンプルプログラムを載せておきます。
サンプルプログラム
1 2 3 4 5 6 7 8 9 10 |
public function isFileExsist($url) { $headers = get_headers($url); if( is_array($headers) && count($headers) > 0 ) { if( strpos($headers[0],'OK') ) { return true; } } return false; } |
get_headers() 関数を使う理由
上記のプログラムにて、ファイルの有無を判定する方法に file_get_contents() 関数などの GET メソッドを使用しても目標は達成できます。ただ GET メソッドはファイル本体も返却するため、画像や動画などの大きいファイルにアクセスしたときに応答速度が遅くなります。
get_headers() 関数は HEAD メソッドを使用するため、ファイルのサイズを問わずに一定の速度を実現できます。
サンプルとして get_headers() 関数で画像ファイルの情報を取得したときの実行結果を載せておきます。
画像ファイルのヘッダー情報を取得したサンプル
1 2 3 4 5 6 7 8 9 10 11 |
root@hostname:# php getheader.php array(9) { [0]=> string(15) "HTTP/1.1 200 OK" [1]=> string(29) "Server: nginx/1.14.0 (Ubuntu)" [2]=> string(35) "Date: Mon, 15 Apr 2019 13:11:04 GMT" [3]=> string(24) "Content-Type: image/jpeg" [4]=> string(21) "Content-Length: 156896" [5]=> string(44) "Last-Modified: Tue, 12 Mar 2019 13:21:07 GMT" [6]=> string(17) "Connection: close" [8]=> string(20) "Accept-Ranges: bytes" } |
ウェブプログラミングについては下記の本も参考になるので、スキルアップにお役立てください。