ファイルが画像かどうかを判断するには、getimagesize 関数を使用して画像情報を取得し、画像の最初の 2 バイトを判断または読み取るなど、関連情報を検索することでいくつかの方法を見つけました。以下の詳細な紹介を見てみましょう。必要な友達はそれを参照してください。
はじめに
Web デザインでは、画像が必要な場合、通常、画像のファイル名を取得します。ファイル名だけではそのファイルが画像ファイルであるかどうかを判断することはできません。ファイルの拡張子名で判断できると思っている人もいるかもしれませんが、ファイルの拡張子名は自由に変更できることを忘れないでください。さらに、Linux システムでは、ファイル形式はサフィックスによって区別されません。サフィックス名で画像を区別できると単純に考えていると、エラーが発生したときに、どこにエラーがあるのかさえ分からない可能性があります。たとえば、迷惑な人がテキスト ファイルを background.jpg に変更して使用できるように渡した場合、画像が破損していると単純に考えるかもしれませんが、それが単なるテキスト ファイルであるとは決して考えないでください。
不要な問題を避けるために、写真を取得するときは、そのファイルが本当に写真ファイルであるかどうかを正しく判断する必要があります。 3つの判断方法をまとめましたので、困っている方はぜひ参考にしてみてください。
方法1
getimagesize関数を使用して画像情報を取得し、判断する:
<?php # Script -- isimg.php /* Author @ Huoty * Date @ 2015-11-24 16:59:26 * Brief @ */ function isImage($filename) { $types = '.gif|.jpeg|.png|.bmp'; //定义检查的图片类型 if(file_exists($filename)) { if (($info = @getimagesize($filename)) return 0; $ext = image_type_to_extension($info['2']); return stripos($types,$ext); } else { return false; } } if(isImage('isimg.txt')!==false) { echo isImage('1.jpg'); echo '是图片'; } else { echo '不是图片'; } ?>
方法2
画像の最初の2バイトを読み取り、画像かどうかを判断する写真:
<?php # Script -- isimg2.php /* Author @ Huoty * Date @ 2015-11-25 16:42:38 * Brief @ */ //判断上传的是不是图片 function isImg($fileName) { $file = fopen($fileName, "rb"); $bin = fread($file, 2); // 只读2字节 fclose($file); $strInfo = @unpack("C2chars", $bin); $typeCode = intval($strInfo['chars1'].$strInfo['chars2']); $fileType = ''; if($typeCode == 255216 /*jpg*/ || $typeCode == 7173 /*gif*/ || $typeCode == 13780 /*png*/) { return $typeCode; } else { // echo '"仅允许上传jpg/jpeg/gif/png格式的图片!'; return false; } } if (isImg("1.jpg")) { echo "是图片"; } else { echo "不是图片"; } ?>
方法 3
最後の方法は、画像のタイプを決定するために使用される exif_imagetype 関数を使用する方法です。画像の最初のバイトを読み取り、その署名を確認します。 適切な署名が見つかった場合は対応する定数を返し、それ以外の場合は FALSE を返します。戻り値は getimagesize() によって返される配列のインデックス 2 と同じですが、この関数の方がはるかに高速です。
この関数の戻り値の定数は次のように定義されています:
1 IMAGETYPE_GIF 2 IMAGETYPE_JPEG 3 IMAGETYPE_PNG 4 IMAGETYPE_SWF 5 IMAGETYPE_PSD 6 IMAGETYPE_BMP 7 IMAGETYPE_TIFF_II(Intel 字节顺序) 8 IMAGETYPE_TIFF_MM(Motorola 字节顺序) 9 IMAGETYPE_JPC 10 IMAGETYPE_JP2 11 IMAGETYPE_JPX 12 IMAGETYPE_JB2 13 IMAGETYPE_SWC 14 IMAGETYPE_IFF 15 IMAGETYPE_WBMP 16 IMAGETYPE_XBM
<?php # Script -- isimg3.php /* Author @ Huoty * Date @ 2015-11-25 16:53:04 * Brief @ */ $mimetype = exif_imagetype("1.jpg"); if ($mimetype == IMAGETYPE_GIF || $mimetype == IMAGETYPE_JPEG || $mimetype == IMAGETYPE_PNG || $mimetype == IMAGETYPE_BMP) { echo "是图片"; } ?>
概要
以上がPHPによるファイルが画像かどうかの判断についての説明でした。 PHP の学習または使用について質問がある場合は、メッセージを残して連絡してください。