
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 |