Andy's Blog » » PHP取二进制文件头快速判断文件类型

PHP取二进制文件头快速判断文件类型

<?php
 
    
$files = array(
        
'c:\1.jpg',
        
'c:\1.png',
        
'c:\1.gif',
        
'c:\1.rar',
        
'c:\1.zip',
        
'c:\1.exe',
    
);
    
foreach ($files AS $file) {
        
$fp = fopen($file, "rb");
        
$bin = fread($fp, 2); //只读2字节
        
fclose($fp);
        
$str_info  = @unpack("C2chars", $bin);
        
$type_code = intval($str_info['chars1'].$str_info['chars2']);
        
$file_type = '';
        
switch ($type_code) {
            
case 7790:
                
$file_type = 'exe';
                
break;
            
case 7784:
                
$file_type = 'midi';
                
break;
            
case 8075:
                
$file_type = 'zip';
                
break;
            
case 8297:
                
$file_type = 'rar';
                
break;
            
case 255216:
                
$file_type = 'jpg';
                
break;
            
case 7173:
                
$file_type = 'gif';
                
break;
            
case 6677:
                
$file_type = 'bmp';
                
break;
            
case 13780:
                
$file_type = 'png';
                
break;
            
default:
                
$file_type = 'unknown';
                
break;
        
}
 
        
echo $file , ' type: <b>', $file_type, '</b> code:<b>', $type_code, '</b><br />';
 
    
}

本例输出结果

c:\1.jpg type: jpg code:255216
c:\1.png type: png code:13780
c:\1.gif type: gif code:7173
c:\1.rar type: rar code:8297
c:\1.zip type: zip code:8075
c:\1.exe type: exe code:7790

Incoming search terms:

Tags: PHP, 二进制, 文件类型

本文地址: http://blog.21andy.com/20090624/1337.html

4 评论 to “PHP开源CMS之MODx”

  1. henry 于 2009-10-12 13:46:53 发表:

    这种方法灵验不?

  2. aaa 于 2010-01-13 11:03:21 发表:

    jpg的不行他截取的前两个东西 不正常

  3. yzl 于 2010-02-24 10:31:14 发表:

    $strInfo = @unpack("c2chars", $bin);

    这一行中,小写的c改成大写的C,(大写的C表示无符号),这就正常了。

    Andy 于 2010-02-24 16:22:38 回复:

    多谢你的指正!