>  기사  >  백엔드 개발  >  파일이 이미지인지 확인하기 위해 PHP를 사용하는 방법 요약

파일이 이미지인지 확인하기 위해 PHP를 사용하는 방법 요약

迷茫
迷茫원래의
2017-01-24 13:58:324060검색

파일이 이미지인지 확인하기 위해 getimagesize 함수를 사용하여 이미지 정보를 얻은 다음 이미지의 처음 2바이트를 판단하거나 읽는 등 관련 정보를 검색하여 여러 가지 방법을 찾았습니다. 아래의 자세한 소개를 살펴보겠습니다. 도움이 필요한 친구들은 참고할 수 있습니다.

서문

웹 디자인에서는 사진이 필요한 경우 일반적으로 이미지의 파일명을 가져옵니다. 파일명만으로는 이미지 파일인지 구별이 불가능합니다. 어떤 사람들은 접미사 이름으로 판단할 수 있다고 생각할 수도 있습니다. 파일 접미사 이름은 마음대로 변경될 수 있다는 것을 잊지 마십시오. 게다가 Linux 시스템에서는 파일 형식이 접미사로 구분되지 않습니다. 접미사 이름으로 사진을 구별할 수 있다고 순진하게 생각한다면 오류가 발생했을 때 오류가 어디에 있는지조차 모를 수도 있습니다. 예를 들어 귀찮은 사람이 텍스트 파일을 background.jpg로 바꿔서 사용하라고 주면 단순히 이미지가 손상됐다고 생각할 수도 있지만 단순한 텍스트 파일이라고는 생각하지 마세요.

불필요한 문제가 발생하지 않도록 사진을 받았을 때 정말 사진파일인지 정확하게 판단해야 합니다. 여기에 세 가지 판단 방법이 요약되어 있습니다. 도움이 필요한 친구들이 함께 살펴볼 수 있습니다.

방법 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으로 문의하세요.