function getFileType($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;
}
return $file_type;
}
1
momocraft 2019-08-16 09:51:50 +08:00
不在 java 也叫魔数
man file |
2
awanganddong OP @momocraft 最大的困惑点就在于 把 7790 类似这些数转化为 16 进制就是文件的魔数吧?
|
3
qq316107934 2019-08-16 11:55:17 +08:00
@awanganddong #2 所谓的魔数其实就是文件的头两个字节的内容,一般取 4 个字节甚至 8 个字节根据一些其他规则去匹配合理一些,参考 binwalk 和 https://en.wikipedia.org/wiki/List_of_file_signatures
|
4
micookie 2019-08-16 12:15:32 +08:00
|
6
awanganddong OP 谢谢各位
|
7
sleepm 2019-08-16 16:28:56 +08:00 via Android
libmagic
|
8
huxiaohaiyang 2019-08-16 18:22:22 +08:00
包装下 tika.jar
|