PHPのプログラムを作成していて、ファイルが画像なのかそうでないのか判定したいと思ったことはないでしょうか。
strstr や preg_match などの関数を使用してファイルの拡張子を地道に調べることもできますが、PHPではもっと簡単に画像かどうかを判定できる関数があるので紹介したいと思います。
getimagesize 関数を使って画像を判定する方法
それではPHPで画像ファイルかどうかを判定するプログラムを紹介したいと思います。
$file_path = 'img_1.jpg';
if (@getimagesize($file_path)) {
echo "The file is an image.";
} else {
echo "The file is not an image.";
}
プログラムの実行結果:
The file is an image.
プログラム解説
上記のプログラムについて解説したいと思います。
ここで画像かどうかを調べたいファイルのパスを指定して、変数「$file_path」に格納しております。今回はPHPファイルと同じディレクトリに画像ファイルを配置しています。
変数「$file_path」にはファイルのパスが入っていますが、この部分でファイルが画像かどうかの判定をしています。
関数 getimagesize() は、引数でファイルのパスを指定すると、ファイルの情報を配列で返却します。ファイルが画像ではなかったり、ファイルが存在しない場合は、「false」を返却します。
ファイルが存在しない場合などは、Warning が表示されてしまうので、それを回避するためにプログラムでは「@」を関数の前につけております。ちなみに画像ファイルの拡張子を「txt」などと変更しても画層と認識してファイル情報の配列を返却します。
試しにファイル情報の配列を表示させてみると、次のようになります。
$file_path = 'img_1.jpg';
$info = @getimagesize($file_path);
print_r($info);
プログラムの実行結果:
Array
(
[0] => 6000
[1] => 4000
[2] => 2
[3] => width="6000" height="4000"
[bits] => 8
[channels] => 3
[mime] => image/jpeg
)
返却される配列には画像ファイルの大きさや種類の情報が入っていることがわかります。
exif_imagetype 関数を使って画像を判定する方法
今度は関数 exif_imagetype を使用してファイルが画像かどうかを判定するプログラム例です。
$file_path = 'img_1.jpg';
if (exif_imagetype($file_path)) {
echo "The file is an image.";
} else {
echo "The file is not an image.";
}
プログラムの実行結果:
The file is an image.
プログラム解説
上記のプログラムについて解説していきます。
先程のプログラムと同様に変数「$file_path」にファイルのパスを指定して、今度は別の関数を使用して画像かどうかの判定をしております。
関数 exif_imagetype はファイルのパスを引数で指定すると、画像だった場合は「int 値」、そうでない場合は「false」を返却します。
「int 値」はファイルの種類によって異なる値となります。一例を上げると次となりますが、PHPの定数として「IMAGETYPE_GIF」などが用意されております。
- 1 : IMAGETYPE_GIF
- 2 : IMAGETYPE_JPEG
- 3 : IMAGETYPE_PNG
関数 exif_imagetype についても画像ファイルの拡張子を消したり、「txt」などに変更したりしても問題なく判定してくれます。
まとめ
以上、getimagesize() や exif_imagetype() の関数を使用して、ファイルが画像かどうかを判定する方法について解説しました。
拡張子に含まれる「jpg」などの文字列を検索する方法もありますが、これだとテキストファイルの拡張子を「jpg」などに変更した場合は、画像と認識してしまいます。
コメント