ホームページ >バックエンド開発 >PHPの問題 >PHPでファイルが画像かどうかを判断する方法

PHPでファイルが画像かどうかを判断する方法

藏色散人
藏色散人オリジナル
2020-10-07 00:06:077564ブラウズ

ファイルが画像かどうかを判断する

php メソッド: 1. getimagesize 関数を使用して画像情報を取得し、判断します; 2. 画像の最初の 2 バイトを読み取り、判定; 3. exif_imagetype 関数を使用して判定を実装します。

PHPでファイルが画像かどうかを判断する方法

推奨: 「php ビデオ チュートリアル

PHP を使用してファイルが正しいかどうかを判断する方法an image

最近、仕事でファイルが画像かどうかを判断する必要が生じたので、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 中国語 Web サイトの他の関連記事を参照してください。

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