当前位置:编程学习 > php >>

php判断图片类型格式的函数过程

php判断图片类型的几种方法
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
$options = array(
CURLOPT_URL => 'http://www.zhaoxi.org/images/makeskin/h42.gif',
CURLOPT_HEADER => false
);
curl_setopt_array($ch, $options);
curl_exec($ch);
echo "<pre>";
print_r(curl_getinfo($ch));
echo "</pre>";
?>
===============================================<?php
$filename = "zhaoxi.jpg";//为图片的路径可以用d:/upload/zhaoxi.jpg等绝对路径
$file = fopen($filename, "rb");
$bin = fread($file, 2); //只读2字节
fclose($file);
$strInfo = @unpack("C2chars", $bin);
$typeCode = intval($strInfo['chars1'].$strInfo['chars2']);
$fileType = '';
switch ($typeCode)
{
case 7790:
$fileType = 'exe';
break;
case 7784:
$fileType = 'midi';
break;
case 8297:
$fileType = 'rar';
break;
case 255216:
$fileType = 'jpg';
break;
case 7173:
$fileType = 'gif';
break;
case 6677:
$fileType = 'bmp';
break;
case 13780:
$fileType = 'png';
break;
default:
echo 'unknown';
}
echo '这是一个'.$fileType.' file:'.$typeCode;
?>
======================================================

这里所说的判断图片类型主要说的是根据文件的内容来判断图片类型,而不是根据文件的后缀名来判断图片类型,因为文件的后缀名是可以修改的。
但是话说回来,图片的内容也是可以修改的,一般很少有人这么做,因为图片的内容是二进制的。
用Ultraedit打开某个图片文件,默认是以16进制打开的。
function pictype ( $file )
{
     $header = file_get_contents ( $file , 0 , NULL , 0 , 5 );
     //echo bin2hex($header);
     if ( $header { 0 }. $header { 1 }== "\x89\x50" )
     {
         return 'png' ;
     }
     else if( $header { 0 }. $header { 1 } == "\xff\xd8" )
     {
         return 'jpeg' ;
     }
     else if( $header { 0 }. $header { 1 }. $header { 2 } == "\x47\x49\x46" )
     {
       
         if( $header { 4 } == "\x37" )
             return 'gif87' ;
         else if( $header { 4 } == "\x39" )
             return 'gif89' ;
     }
   
}
$filename = 'zhaoxi.jpg';
echo 'pictype:' . pictype($filename );

注意 有些人可以修改图片的二进制,但用这个判断正常图片的类型已经足够了

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,