最简单的方法就是判断文件后缀名,但是问题是如果修改了文件后缀名呢?
那么现在从外部文件名的后缀无法判断文件的格式,那么就从内部查找;
不同格式的文件结构 中都会有规定的标识,也是一种文件结构协议!
- 每个二进制文件的头两个字节作为文件标识;
- 每个二进制文件中都存在不同的标识符(具体未统计);
//从文件内部判断类型 取每个文件的前两个字节
$filename = "./1.png";
$file = fopen($filename, "rb");
$bin = fread($file, 2); //只读2字节
fclose($file);
// unpack() 函数从二进制字符串对数据进行解包。
$strInfo = @unpack("C2", $bin);
$typeCode = "$strInfo[1]"."$strInfo[2]";
$fileType = '';
switch ($typeCode)
{
case 7790:
$fileType = 'exe';
break;
case 7784:
$fileType = 'midi';
break;
case 8297:
$fileType = 'rar';
break;
case 255216:
$fileType = 'jpg';
break;
case 7173:
$fileType = 'gif';
break;
case 6677:
$fileType = 'bmp';
break;
case 13780:
$fileType = 'png';
break;
default:
echo 'unknown';
}
echo 'this is a(an) '.$fileType.' file:'.$typeCode;
EXIT;