PHP分析文件头信息判断上传文件的类型

在用PHP上传文件时一般限制可上传的文件类型的做法是通过文件的后缀进行判断,但这样的做法存在缺点,相信所有的phper们都是知道的,下面介绍一个可以从最根本上判断用户上传的文件类型的函数。

简要分析一下本函数通过文件头信息实现判断上传文件类型的过程思路,首先使用用fopen()函数打开上传的文件,然后通过fread()读取文件的前2个字节。得到的内容会是二进制的字符串,为了能在程序代码中做判断,这里使用的是unpack()函数把二进制数据转换成十进制数字的字符串(unpack()函数主要用于二进制操作,具体用法可参见php帮助文档,这里做解释!),然后进行判断即可。

下面直接把案例代码贴出来吧:

  1. $filename='http://www.daimajiayuan.com/logo.gif'
  2. $file=fopen($filename,'rb'); 
  3. $bin=fread($file,2); //只读取上传文件的头文信息的2个字节 
  4. fclose($file); 
  5. $strInfo=@unpack('c2chars',$bin); 
  6. $typeCode=intval($strInfo['chars1'].$strInfo['chars2']); 
  7. $fileType=''
  8. switch ($typeCode){ 
  9.     case 7790: 
  10.         $fileType='exe'
  11.     break
  12.     case 7784: 
  13.         $fileType='midi'
  14.     break
  15.     case 8297: 
  16.         $fileType='rar'
  17.     break
  18.     case 255216: 
  19.         $fileType='jpg'
  20.     break
  21.     case 7173: 
  22.         $fileType='gif'
  23.     break
  24.     case 6677: 
  25.         $fileType='bmp'
  26.     break
  27.     case 13780: 
  28.         $fileType='png'
  29.     break
  30.     default
  31.         echo 'unknown'
  32.     break
  33. echo '文件类型:'.$fileType.' 文件头信息:'.$typeCode

转载请注明:代码家园 » PHP分析文件头信息判断上传文件的类型

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)