>백엔드 개발 >PHP 문제 >PHP에서 파일이 이미지인지 확인하는 방법

PHP에서 파일이 이미지인지 확인하는 방법

藏色散人
藏色散人원래의
2020-10-07 00:06:077566검색

PHP가 파일이 이미지인지 판단하는 방법: 1. getimagesize 함수를 사용하여 이미지 정보를 얻은 다음 판단합니다. 2. 이미지의 처음 2바이트를 읽은 다음 판단합니다. 판단할 EXIF_imagetype 함수입니다.

PHP에서 파일이 이미지인지 확인하는 방법

추천: "php 비디오 튜토리얼"

How to use PHP to 알아내기 a file is an image

최근 직장에서 파일이 이미지인지 알아내야 하는 필요성을 느꼈습니다. 이 기능을 통해 관련 정보를 검색하고 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으로 문의하세요.