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
;