PHP 根据文件头获取文件类型后缀
使用 PHP 脚本在网上下载图片,目标网站使用了缩略图服务,网址里面根本就没有文件的后缀,但是通过浏览器打开是完全正常的,那就只有通过下载完成以后,识别文件的类型,然后再重命名把文件后缀加上。
要识别文件,只能通过文件头来操作,什么是文件头部Bom? 说白了,就是在保存文件的时候,文件前面会多出一串隐藏的字符,文件签名一般都在文件的头部,如果你用十六进制方式查看文件,你就可以看到文件的一些签名信息。如用 uestudio 以十六进制方式查看 zip 格式的文件,其文件内容头部有 50 4B 03 04 这样的十六进制信息。同理 jpg 文件状况有 FF D8 FF E0 xx xx 4A 46 这样的十六进制信息,其实这此十六进制都是表示一些特殊字条。
function checkFileType($fileName){
$file = fopen($fileName, "rb");
$bin = fread($file, 2); // 只读2字节
// C为无符号整数,网上搜到的都是c,为有符号整数,这样会产生负数判断不正常
$strInfo = @unpack("C2chars", $bin);
$typeCode = intval($strInfo['chars1'].$strInfo['chars2']);
$fileType = '';
switch( $typeCode )
{
case '255216':
return 'jpg';
break;
case '7173':
return 'gif';
break;
case '13780':
return 'png';
break;
case '6677':
return 'bmp';
break;
case '7790':
return 'exe';
break;
case '7784':
return 'midi';
break;
case '8297':
return 'rar';
break;
default:
return 'Unknown';
break;
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: 数据库 面试题
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论