如何通过文件头准确识别PHP上传的文件类型
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,如何通过文件头准确识别PHP上传的文件类型,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
千家信息网最后更新 2026年11月03日如何通过文件头准确识别PHP上传的文件类型
如何通过文件头准确识别PHP上传的文件类型,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
getTypeList(); } /** * 处理文件类型映射关系表* * * @param string $filename 文件类型 * @return string 文件类型,没有找到返回:other */ private function _getFileType($filename) { $filetype="other"; if(!file_exists($filename)) throw new Exception("no found file!"); $file = @fopen($filename,"rb"); if(!$file) throw new Exception("file refuse!"); $bin = fread($file, 15); //只读15字节 各个不同文件类型,头信息不一样。 fclose($file); $typelist=self::$_TypeList; foreach ($typelist as $v) { $blen=strlen(pack("H*",$v[0])); //得到文件头标记字节数 $tbin=substr($bin,0,intval($blen)); ///需要比较文件头长度 if(strtolower($v[0])==strtolower(array_shift(unpack("H*",$tbin)))) { return $v[1]; } } return $filetype; } /** * 得到文件头与文件类型映射表* * * @return array array(array('key',value)...) */ public function getTypeList() { return array(array("FFD8FFE1","jpg"), array("89504E47","png"), array("47494638","gif"), array("49492A00","tif"), array("424D","bmp"), array("41433130","dwg"), array("38425053","psd"), array("7B5C727466","rtf"), array("3C3F786D6C","xml"), array("68746D6C3E","html"), array("44656C69766572792D646174","eml"), array("CFAD12FEC5FD746F","dbx"), array("2142444E","pst"), array("D0CF11E0","xls/doc"), array("5374616E64617264204A","mdb"), array("FF575043","wpd"), array("252150532D41646F6265","eps/ps"), array("255044462D312E","pdf"), array("E3828596","pwl"), array("504B0304","zip"), array("52617221","rar"), array("57415645","wav"), array("41564920","avi"), array("2E7261FD","ram"), array("2E524D46","rm"), array("000001BA","mpg"), array("000001B3","mpg"), array("6D6F6F76","mov"), array("3026B2758E66CF11","asf"), array("4D546864","mid")); } public static function getFileType($filename) { if(!self::$CheckClass) self::$CheckClass=new self($filename); $class=self::$CheckClass; return $class->_getFileType($filename); } }调用方法:
$filename="d:/1.png"; echo $filename,"\t",cFileTypeCheck::getFileType($filename),"\r\n"; $filename="d:/test.doc"; echo $filename,"\t",cFileTypeCheck::getFileType($filename),"\r\n";
输出:
d:/1.png png d:/test.doc xls/doc
通过WinHex软件来获取文件的头信息: 可以看到:png 文件,头是4个字节(头标记是多少字节需要自己查相关资料确定),对应是:89504E47
看完上述内容,你们掌握如何通过文件头准确识别PHP上传的文件类型的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!
文件
类型
字节
方法
信息
内容
更多
标记
问题
不同
束手无策
为此
原因
对此
技能
篇文章
经验
行业
资料
资讯
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网络科技
小米移动互联网科技园
平安科技 互联网
互联网未来科技
广州紫鲸互联网科技
互联网科技英文翻译
中国互联网金融科技基金
无锡溥仪互联网科技有限公司
博兴的互联网电子科技公司
北京华百购互联网科技有限公司
互联网科技大奖都有哪些公司
广州新华互联网科技学校电竞方面
科技互联网海报
元气玛特互联网科技公司是外包吗
皮皮虾互联网科技有限公司
互联网科技融合创新
风投北京互联网科技
宁波跨境商互联网科技有限公司
互联网科技机房
重庆科技产业互联网有哪些
咖啡
互联网科技股票
语蝶互联网科技有限公司
深圳市罗太互联网科技有限公司
黑科技 体验场景 互联网大会
广东鹅鹅鹅互联网科技有限公司
福州德业互联网科技
长沙渺峰互联网科技有限公司
好易买互联网科技
互联网大会出现的黑科技