background image

PHP 取二进制文件头快速判断文件类型的实现代码

以下代码就展示了自己通过读取文件头信息来识别文件的真实类型。需要的朋友可以过来参
考下
一般我们都是按照文件扩展名来判断文件类型,但是这个很不靠谱,轻易就通过修改扩展
名来躲避了,一般必须要读取文件信息来识别,

PHP 扩展中提供了类似 exif_imagetype 这

样的函数读取图片类的文件类型,但是很多时候扩展不一定安装了,有时候就需要自己来
实现识别文件类型的工作。
 
下面代码就展示了自己通过读取文件头信息来识别文件的真实类型。
代码如下

:

 
<?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

;