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 = '.gif|.jpeg|.png|.bmp'; //定义检查的图片类型 if(file_exists($filename)) { if (($info = @getimagesize($filename)) return 0; $ext = image_type_to_extension($info['2']); return stripos($types,$ext); } else { return false; } } if(isImage('isimg.txt')!==false) { echo isImage('1.jpg'); echo '是图片'; } else { echo '不是图片'; } ?>
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['chars1'].$strInfo['chars2']); $fileType = ''; if($typeCode == 255216 /*jpg*/ || $typeCode == 7173 /*gif*/ || $typeCode == 13780 /*png*/) { return $typeCode; } else { // echo '"仅允许上传jpg/jpeg/gif/png格式的图片!'; return false; } } if (isImg("1.jpg")) { echo "是图片"; } else { echo "不是图片"; } ?>
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
<?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 "是图片"; } ?>
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.