Maison >développement back-end >Problème PHP >Comment déterminer si un fichier est une image en php

Comment déterminer si un fichier est une image en php

藏色散人
藏色散人original
2020-10-07 00:06:077566parcourir

Comment PHP détermine si un fichier est une image : 1. Utilisez la fonction getimagesize pour obtenir les informations sur l'image, puis portez un jugement ; 2. Lisez les 2 premiers octets de l'image, puis portez un jugement ; ; 3. Utilisez la fonction exif_imagetype pour implémenter Judge.

Comment déterminer si un fichier est une image en php

Recommandé : "Tutoriel vidéo php"

Comment utiliser PHP pour déterminer si un fichier est une image

J'ai récemment rencontré le besoin au travail de déterminer si un fichier est une image. J'ai trouvé plusieurs méthodes en recherchant des informations pertinentes, notamment en utilisant la fonction getimagesize pour obtenir des informations sur l'image, puis en les créant. un jugement ou des méthodes telles que la lecture des 2 premiers octets de l'image.

Avant-propos

Dans la conception de sites Web, si nous avons besoin d'une image, nous obtenons généralement le nom de fichier d'une image. Il est impossible de savoir si le fichier est un fichier image uniquement par son nom. Certaines personnes peuvent penser qu'elles peuvent juger par le nom du suffixe. N'oubliez pas que le nom du suffixe du fichier peut être modifié à volonté. De plus, sous les systèmes Linux, les formats de fichiers ne sont pas distingués par des suffixes. Si vous pensez naïvement que vous pouvez distinguer les images par des noms de suffixes, alors lorsqu'une erreur se produit, vous ne savez peut-être même pas où se trouve l'erreur. Par exemple, si une personne ennuyeuse modifie un fichier texte en background.jpg et vous le donne à utiliser, vous pouvez simplement penser que l'image est endommagée, mais ne vous attendez jamais à ce qu'il s'agisse simplement d'un fichier texte.

Afin d'éviter des problèmes inutiles, lorsque vous obtenez une image, vous devez juger correctement si le fichier est réellement un fichier image. Trois méthodes de jugement sont résumées ici. Les amis dans le besoin peuvent y jeter un œil.

Méthode 1

Utilisez la fonction getimagesize pour obtenir les informations sur l'image, puis portez un jugement :

<?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;;
}
?>

Méthode 2

Lisez les 2 premiers octets de l'image, puis déterminez s'il s'agit d'une image :

<?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 "不是图片";
}
?>

Troisième méthode

La dernière méthode consiste à utiliser la fonction exif_imagetype, qui est utilisée pour déterminer le type d'une image. est plus simple. Lisez les premiers octets d'une image et vérifiez sa signature. Renvoie une constante correspondante si une signature appropriée est trouvée, sinon renvoie FALSE. La valeur de retour est la même que l'index 2 du tableau renvoyé par getimagesize(), mais cette fonction est beaucoup plus rapide.

La constante de valeur de retour de cette fonction est définie comme suit :

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

Exemple :

<?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 "是图片";
}
?>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn