PHP 根据文件头获取文件类型后缀

发布于 2021-12-25 12:51:26 字数 965 浏览 1174 评论 0

使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84961 人气
更多

推荐作者

已经忘了多久

文章 0 评论 0

15867725375

文章 0 评论 0

LonelySnow

文章 0 评论 0

走过海棠暮

文章 0 评论 0

轻许诺言

文章 0 评论 0

信馬由缰

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文