PHP取二进制文件头快速判断文件类型的实现代码


Posted in PHP onAugust 05, 2013

一般我们都是按照文件扩展名来判断文件类型,但是这个很不靠谱,轻易就通过修改扩展名来躲避了,一般必须要读取文件信息来识别,PHP扩展中提供了类似 exif_imagetype 这样的函数读取图片类的文件类型,但是很多时候扩展不一定安装了,有时候就需要自己来实现识别文件类型的工作。

下面代码就展示了自己通过读取文件头信息来识别文件的真实类型。

<?php
     $files = array(
        'c:\1.jpg',
        'c:\1.png',
        'c:\1.gif',
        'c:\1.rar',
        'c:\1.zip',
        'c:\1.exe',
    );
    foreach ($files AS $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;
        }        echo $file , ' type: <b>', $file_type, '</b> code:<b>', $type_code, '</b><br />';
    }

本例输出结果
c:\1.jpg type: jpg code:255216
c:\1.png type: png code:13780
c:\1.gif type: gif code:7173
c:\1.rar type: rar code:8297
c:\1.zip type: zip code:8075
c:\1.exe type: exe code:7790
PHP 相关文章推荐
Http 1.1 Etag 与 Last-Modified提高php效率
Jan 10 PHP
php下保存远程图片到本地的办法
Aug 08 PHP
php删除左端与右端空格的方法
Nov 29 PHP
php用ini_get获取php.ini里变量值的方法
Mar 04 PHP
php动态绑定变量的用法
Jun 16 PHP
PHP+Mysql+jQuery文件下载次数统计实例讲解
Oct 10 PHP
weiphp微信公众平台授权设置
Jan 04 PHP
php rmdir使用递归函数删除非空目录实例详解
Oct 20 PHP
php如何比较两个浮点数是否相等详解
Feb 12 PHP
PHP使用CURL实现下载文件功能示例
Jun 03 PHP
Laravel使用RabbitMQ的方法示例
Jun 18 PHP
PHP CURL实现模拟登陆并上传文件操作示例
Jan 02 PHP
深入解析PHP 5.3.x 的strtotime() 时区设定 警告信息修复
Aug 05 #PHP
浅析Mysql 数据回滚错误的解决方法
Aug 05 #PHP
解析php mysql 事务处理回滚操作(附实例)
Aug 05 #PHP
php多层数组与对象的转换实例代码
Aug 05 #PHP
注意:php5.4删除了session_unregister函数
Aug 05 #PHP
PHP中fwrite与file_put_contents性能测试代码
Aug 02 #PHP
PHP-Fcgi下PHP的执行时间设置方法
Aug 02 #PHP
You might like
overlord人气高涨,却被菲利普频繁举报,第四季很难在国内上映
2020/05/06 日漫
Base64在线编码解码实现代码 演示与下载
2011/01/08 PHP
CentOS下与Apache连接的PHP多版本共存方案实现详解
2015/12/19 PHP
PHP递归实现快速排序的方法示例
2017/12/18 PHP
JQuery textlimit 显示用户输入的字符数 限制用户输入的字符数
2009/05/14 Javascript
JavaScript Object的extend是一个常用的功能
2009/12/02 Javascript
图片动画横条广告带上下滚动可自定义图片、链接等等
2013/10/20 Javascript
js获取内联样式的方法
2015/01/27 Javascript
jquery中ajax跨域方法实例分析
2015/12/18 Javascript
JavaScript基础知识点归纳(推荐)
2016/07/09 Javascript
AngularJS Bootstrap详细介绍及实例代码
2016/07/28 Javascript
AngularJS入门教程之过滤器用法示例
2016/11/02 Javascript
详解Vue后台管理系统开发日常总结(组件PageHeader)
2019/11/01 Javascript
swiper自定义分页器的样式
2020/09/14 Javascript
如何在 Vue 中使用 JSX
2021/02/14 Vue.js
[55:35]VGJ.S vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
[08:08]DOTA2-DPC中国联赛2月28日Recap集锦
2021/03/11 DOTA
使用Mixin设计模式进行Python编程的方法讲解
2016/06/21 Python
python学习教程之Numpy和Pandas的使用
2017/09/11 Python
Pytorch实现各种2d卷积示例
2019/12/30 Python
python 已知平行四边形三个点,求第四个点的案例
2020/04/12 Python
python右对齐的实例方法
2020/07/05 Python
Python使用socket模块实现简单tcp通信
2020/08/18 Python
CSS3的文字阴影—text-shadow的使用方法
2012/12/25 HTML / CSS
基于Modernizr 让网站进行优雅降级的分析
2013/04/21 HTML / CSS
土耳其时尚潮流在线购物网站:Trendyol
2017/10/10 全球购物
都柏林通行卡/城市通票:The Dublin Pass
2020/02/16 全球购物
如何安装ruby on rails
2014/02/09 面试题
电子商务自荐书范文
2014/01/04 职场文书
售后客服工作职责
2014/06/16 职场文书
毕业生爱心捐书倡议书
2015/04/27 职场文书
护士岗位竞聘书
2015/09/15 职场文书
2019请假条的基本格式及范文!
2019/07/05 职场文书
俄罗斯十大城市人口排名,第三首都仅排第六,第二是北方首都
2022/03/20 杂记
mysql中如何用命令创建联合唯一索引
2022/04/20 MySQL
Python使用BeautifulSoup4修改网页内容
2022/05/20 Python