《PHP獲取圖片類型最佳綜合函數》要點:
本文介紹了PHP獲取圖片類型最佳綜合函數,希望對您有用。如果有疑問,可以聯系我們。
相關主題:PHP開發
大家知道,以前,獲取PHP圖片類型,基本都是使用這個函數getimagesize()。但是在微信時代,對于微信圖片,采集過來的圖片,后綴是jpeg,實際是卻是webp,
這樣類型的圖片不能用getimagesize函數獲取圖片信息。那有什么其它辦法?
我們先來分析幾個獲取圖片的函數:
1、finfo() 函數,這個函數需要fileinfo擴展。需要用fileinfo擴展。一般會取得“image/webp; charset=binary”信息。需要注意的是,上面說的webp就可以用它來分析。但是因為需要擴展組件才可以,所以你的服務器不一定能支持。但PHP5.3以上可能都有安裝,所以還是挺普遍的。它的用法如:
$finfo = finfo_open(FILEINFO_MIME); $mimetype = finfo_file($finfo, $filename); finfo_close($finfo); #或用類的方式: $fi = new finfo(FILEINFO_MIME_TYPE); $mime_type = $fi->file($filename);
2、getimagesize函數:這個就不說了吧,老古董了。返回圖片各種信息。
3、exif_imagetype(string filename)判斷一個圖像的類型,返回值和 getimagesize() 返回的數組中的索引 2 的值是一樣的,但本函數快得多。 但本函數需要打開Exif擴展。不過,這個只是獲取類型,還需要轉化才能得到MIME。排除吧。
4、mime_content_type('a.jpg')函數判斷獲取mime類型,此函數已被丟棄,不能使用了。
5、使用自定義的函數,其實是從一堆已有的MIME列表中選一個的方法。
上面每個都各有所長,我們就整合一起吧,目的是為了跨平臺應用,不致于程序換個系統就掛了。所以,兼容性很重要。
下面通用函數中,VEPHP_RESOURCE是維易PHP站全局路徑常量,需要換成你自己的路徑。
/** * 獲取mime跨平臺函數 * 來源:http://www.snjht.com 維易學院, * 分享請保持網址。尊重別人勞動成果。謝謝。 * * @param $filename 圖片名 */ function get_mime_type($filename) { if(class_exists('finfo')){ $fi = new finfo(FILEINFO_MIME_TYPE); $mime_type = $fi->file($filename); return $mime_type; } $fileext = strtolower(trim(strrchr($filename,'.'), '.')); if(in_array($fileext, ['jpg','jpeg','png','gif','bmp'])){ $picInfo = getimagesize($filename); return $picInfo['mime']; #return image_type_to_mime_type(exif_imagetype($filename)); } if (empty($fileext)) return false; $regex = "/^([\w\+\-\.\/]+)\s+(\w+\s)*($fileext\s)/i"; $lines = file(VEPHP_RESOURCE."dict/mime.types"); foreach($lines as $line) { if (substr($line, 0, 1) == '#') continue; $line = rtrim($line) . " "; if (!preg_match($regex, $line, $matches)) continue; return ($matches[1]); } return (false); // no match at all }
函數中用到的MIME文件下載地址:
http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/14.html