Résumé des méthodes pour utiliser PHP pour déterminer si un fichier est une image

迷茫
Libérer: 2023-03-05 10:24:01
original
4056 Les gens l'ont consulté

Pour déterminer si un fichier est une image, plusieurs méthodes ont été trouvées en recherchant des informations pertinentes, notamment en utilisant la fonction getimagesize pour obtenir des informations sur l'image, puis en jugeant ou en lisant les 2 premiers octets de l'image. Jetons un coup d'œil à l'introduction détaillée ci-dessous. Les amis dans le besoin peuvent s'y référer.

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 des 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;;
}
?>
Copier après la connexion

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 "不是图片";
}
?>
Copier après la connexion

Méthode 3

La dernière méthode consiste à utiliser la fonction exif_imagetype, qui permet de déterminer le type d'une image. Cette méthode 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 la valeur à 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
Copier après la connexion
<?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 "是图片";
}
?>
Copier après la connexion

Résumé

Ce qui précède concerne PHP jugeant si un fichier est une image C'est tout. J'espère que le contenu de cet article pourra être utile à tout le monde dans l'apprentissage ou l'utilisation de PHP. Si vous avez des questions, vous pouvez laisser un message pour communiquer.

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!