【PHP】画像ファイルかどうかを判別・確認する方法
ここでは指定したファイルが画像ファイルかどうかを確認する方法を説明します。
ユーザーからアップロードされたファイルが画像かどうかを確認したり、あるフォルダに存在する画像ファイルのみを縮小・圧縮したいときなどに有効かと思います。
exif_imagetype
画像ファイルかどうかを確認する場合、exif_imagetype関数を使うと便利です。
exif_imagetype(ここに画像のパスやURL)
この関数は、画像の形式を判別し、以下の定数を返してくれます(画像形式でなければfalseを返す)。
- IMAGETYPE_GIF
- IMAGETYPE_JPEG
- IMAGETYPE_PNG
- IMAGETYPE_SWF
- IMAGETYPE_PSD
- IMAGETYPE_BMP
- IMAGETYPE_TIFF_II (intel byte order)
- IMAGETYPE_TIFF_MM (motorola byte order)
- IMAGETYPE_JPC
- IMAGETYPE_JP2
- IMAGETYPE_JPX
- IMAGETYPE_JB2
- IMAGETYPE_SWC
- IMAGETYPE_IFF
- IMAGETYPE_WBMP
- IMAGETYPE_XBM
- IMAGETYPE_ICO
戻り値を単純にechoなどで出力すると、以下のように数値が返ってきます。
- 1:gif画像の場合
- 2:jpg画像の場合
- 3:png画像の場合 以下略
なお、画像ファイルかどうかを確認する関数にもうひとつgetimagesize関数がありますが、getimagesize関数は画像サイズなどの情報も返してくれますので、単純に画像形式の確認であればexif_imagetype関数の方が有意に早いです。
サンプル
ということで、画像ファイルかどうかを確認する単純なプログラムを紹介します。
<?php //ファイルのパス $file_pass = "ここに画像のパスまたはURL"; //まずファイルの存在を確認し、その後画像形式を確認する if(file_exists($file_pass) && exif_imagetype($file_pass)){ echo "画像ファイルです"; }else{ echo "画像ファイルではありません(もしくはファイルが存在しません)"; } ?>
また、画像ファイルであった場合、その画像の形式が何なのかを調べる場合、以下のようにします(調べるのはgifかjpgかpng)。
<?php //ファイルのパス $file_pass = "ここに画像のパスまたはURL"; //まずファイルの存在を確認し、その後画像形式を確認する if(file_exists($file_pass) && $type = exif_imagetype($file_pass)){ switch($type){ //gifの場合 case IMAGETYPE_GIF: echo "IMAGETYPE_GIF"; break; //jpgの場合 case IMAGETYPE_JPEG: echo "IMAGETYPE_JPEG"; break; //pngの場合 case IMAGETYPE_PNG: echo "IMAGETYPE_PNG"; break; //どれにも該当しない場合 default: echo "gif、jpg、png以外の画像です"; } }else{ echo "画像ファイルではありません(もしくはファイルが存在しません)"; } ?>
拡張子で画像ファイルか判別する
第三者から渡されたファイルが画像ファイルかどうかを判別する場合、exif_imagetype関数などを使ってしっかりMIMEタイプを確認しなければなりませんが、自サーバーにあるファイル(拡張子をごまかしていないファイル)であれば、単純に拡張子を調べる方法も良いと思います。
方法はいたって簡単で、ファイル名を取得し、preg_match関数で拡張子のマッチングをするだけです。
<?php //ファイル名の取得 $file_name = "拡張子を持つファイル名"; //preg_match関数で判別するファイルの拡張子に「jpg」「jpeg」「png」「gif」が含まれているか確認する if(preg_match( "/.*?\.jpg|.*?\.png||.*?\.gif.*?\.jpeg/i", $file_name)){ echo "画像ファイルです"; }else{ echo "画像ファイルではありません(もしくはファイルが存在しません)"; } ?>
あわせて読んでほしい!
コメント
まだコメントはありません。