您的位置主页 > 编程专区 > Php > 用PHP读文件头部两个字节判断文件真实类型不够精确

用PHP读文件头部两个字节判断文件真实类型不够精确

2010-02-02    文章来源:互联网    浏览次数:84

    网上流传着一种说法,用PHP读文件头部两个字节判断文件真实类型,其实这样判断也是不精确的,就拿office的文件类型来说。
    word以前的格式是storage方式存储,但是现在最新版本的docx是一个zip包。
    即使是以前的storage方式存储的格式,也不能确定就是word文档,因为qq聊天记录也是采用这种方式存储的。所以,如果从文件格式分析的话,将会是很复杂的事情,但是可以实现精确的判断是不是word文档
    比如,读取storage结构,判断里面的子节点名字,如果是docx格式,先用zlib解压,再判断里面的xml文件和目录名字,等等,其他office格式类似。
    从上面一个简单的判断,我们可以得知,读文件头是不能真实判断文件类型的,判断文件类型,是一个很复杂的工作,下面是php读文件头判断文件类型的代码,但是不精准,可以作为参考。不过,除了office,其他还是挺准的。

 
  1. function file_type($filename){
  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.     {
  10.         case 7790:
  11.             $fileType = 'exe';
  12.             break;
  13.         case 7784:
  14.             $fileType = 'midi';
  15.             break;
  16.         case 8297:
  17.             $fileType = 'rar';
  18.             break;
  19.         case 255216:
  20.             $fileType = 'jpg';
  21.             break;
  22.         case 7173:
  23.             $fileType = 'gif';
  24.             break;
  25.         case 6677:
  26.             $fileType = 'bmp';
  27.             break;
  28.         case 13780:
  29.             $fileType = 'png';
  30.             break;
  31.         default:
  32.             $fileType = 'unknown';
  33.     }
  34.     return $fileType;
  35. }

 

文章评论(查看全部)

验证码: 中评 好评 差评