ホームページ  >  記事  >  バックエンド開発  >  PHP を使用してファイルが画像かどうかを判断する方法のまとめ

PHP を使用してファイルが画像かどうかを判断する方法のまとめ

迷茫
迷茫オリジナル
2017-01-24 13:58:323993ブラウズ

ファイルが画像かどうかを判断するには、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 = &#39;.gif|.jpeg|.png|.bmp&#39;; //定义检查的图片类型
 if(file_exists($filename))
 {
  if (($info = @getimagesize($filename))
   return 0;
   
  $ext = image_type_to_extension($info[&#39;2&#39;]);
  return stripos($types,$ext);
 }
 else
 {
  return false;
 }
}
  
if(isImage(&#39;isimg.txt&#39;)!==false)
{
 echo isImage(&#39;1.jpg&#39;);
 echo &#39;是图片&#39;;
}
else
{
 echo &#39;不是图片&#39;;
}
?>

方法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[&#39;chars1&#39;].$strInfo[&#39;chars2&#39;]); 
 $fileType = &#39;&#39;; 
 
 if($typeCode == 255216 /*jpg*/ || $typeCode == 7173 /*gif*/ || $typeCode == 13780 /*png*/) 
 { 
  return $typeCode; 
 }
 else
 { 
  // echo &#39;"仅允许上传jpg/jpeg/gif/png格式的图片!&#39;; 
  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 の学習または使用について質問がある場合は、メッセージを残して連絡してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。