通过文件头来判断文件类型 https://www.garykessler.net/library/file_sigs.html https://en.wikipedia.org/wiki/List_of_file_signatures https://gist.github.com/Qti3e/6341245314bf3513abb080677cd1c93b https://gist.github.com/k1ic/ad805d5e3ee9931bea2c https://gist.github.com/ldong/f334b9dcd421c99e094d https://gist.github.com/soasme/6085733 php文件格式(mime类型)对照表 https://blog.csdn.net/q343509740/article/details/79616603 1. mime_content_type返回指定文件的MIME类型,用法: echo mime_content_type ( 'php.gif' ) . "\n" ; echo mime_content_type ( 'test.php' ); 2. Fileinfo 获取文件MIME类型(finfo_open) PHP官方推荐mime_content_type()的替代函数是Fileinfo函数。用法: $finfo = finfo_open(FILEINFO_MIME); $mimetype = finfo_file($finfo, $filename); finfo_close($finfo); function getTypeList(){ return array( "jpg" => "FFD8FFE1", "png" => "89504E47", "gif" => "47494638", "tif" => "49492A00", "bmp" => "424D", "dwg" => "41433130", "psd" => "38425053", "rtf" => "7B5C727466", "xml" => "3C3F786D6C", "html => "68746D6C3E", "eml" => "44656C69766572792D646174", "dbx" => "CFAD12FEC5FD746F", "pst" => "2142444E", "xls" => "D0CF11E0", "doc" => "D0CF11E0", "mdb" => "5374616E64617264204A", "wpd" => "FF575043", "eps" => "252150532D41646F6265", "ps" => "252150532D41646F6265", "pdf" => "255044462D312E", "pwl" => "E3828596", "zip" => "504B0304", "rar" => "52617221", "wav" => "57415645", "avi" => "41564920", "ram" => "2E7261FD", "rm" => "2E524D46", "mpg" => "000001BA", "mpg" => "000001B3", "mov" => "6D6F6F76", "asf" => "3026B2758E66CF11", "mid" => "4D546864", ) } /** * 获取文件类型(通过读取文件前两个字节判断文件类型) * @param string $path 文件绝对路径 * @return string 文件扩展名 */ function get_file_type( $path = '' ) { $res = ''; if ( file_exists($path) && is_readable($path) ) { $fh = fopen($path, 'rb'); $bin = fread($fh, 2); //不一定只读前两个字节, 各个不同文件类型,头信息不一样。 fclose($fh); $str_info = unpack('C2chars', $bin); //"C2chars"中的“C”表示将给定二进制字符串解包为无符号字节型 $type_code = intval($str_info['chars1'] . $str_info['chars2']); switch ( $type_code ) { case 3533: $res = 'amr'; break; case 6677: $res = 'bmp'; break; case 7790: $res = 'exe'; break; break; case 7173: $res = 'gif'; break; case 255216: $res = 'jpg'; break; case 7368: $res = 'mp3'; break; case 6063: $res = 'php'; break; case 13780: $res = 'png'; break; case 8297: $res = 'rar'; break; case 4950: $res = 'txt'; break; case 8075: $res = 'zip'; break; default: $res = 'unknown' . $type_code; } } else { $res = !file_exists($path) ? 'file not exists' : ( !is_readable($path) ? 'not a readable file' : '' ); } return $res; }