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 相关文章推荐
JS 网站性能优化笔记
May 24 PHP
php下载文件的代码示例
Jun 29 PHP
PHP生成随机密码方法汇总
Aug 27 PHP
php实现表单多按钮提交action的处理方法
Oct 24 PHP
php实现购物车功能(上)
Jul 23 PHP
thinkPHP实现MemCache分布式缓存功能
Mar 23 PHP
PHP中key和current,next的联合运用实例分析
Mar 29 PHP
ThinkPHP实现更新数据实例详解(demo)
Jun 29 PHP
thinkphp跨库操作的简单代码实例
Sep 22 PHP
Yii2数据库操作常用方法小结
May 04 PHP
PHP编程实现微信企业向用户付款的方法示例
Jul 26 PHP
Yii框架页面渲染操作实例详解
Jul 19 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
php程序的国际化实现方法(利用gettext)
2011/08/14 PHP
php使用百度翻译api示例分享
2014/01/31 PHP
ThinkPHP中pathinfo的访问模式、路径访问模式及URL重写总结
2014/08/23 PHP
PHP中的socket_read和socket_recv区别详解
2015/02/09 PHP
详解Yii2.0 rules验证规则集合
2017/03/21 PHP
在次封装easyui-Dialog插件实现代码
2010/11/14 Javascript
javascript进行四舍五入方法汇总
2014/12/16 Javascript
js用拖动滑块来控制图片大小的方法
2015/02/27 Javascript
js实现tab切换效果实例
2015/09/16 Javascript
高性能JavaScript循环语句和条件语句
2016/01/20 Javascript
javascript鼠标跟随运动3种效果(眼球效果,苹果菜单,方向跟随)
2016/10/27 Javascript
基于vue实现多引擎搜索及关键字提示
2017/03/16 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
2017/04/03 jQuery
vue实现在一个方法执行完后执行另一个方法的示例
2018/08/25 Javascript
element vue Array数组和Map对象的添加与删除操作
2018/11/14 Javascript
vue+echarts实现可拖动节点的折线图(支持拖动方向和上下限的设置)
2019/04/12 Javascript
解决layui数据表格table的横向滚动条显示问题
2019/09/04 Javascript
如何基于viewport vm适配移动端页面
2020/11/13 Javascript
python读取注册表中值的方法
2013/04/08 Python
将Emacs打造成强大的Python代码编辑工具
2015/11/20 Python
python批量制作雷达图的实现方法
2016/07/26 Python
网红编程语言Python将纳入高考你怎么看?
2018/06/07 Python
解决python 文本过滤和清理问题
2019/08/28 Python
详解python opencv、scikit-image和PIL图像处理库比较
2019/12/26 Python
pytorch 实现查看网络中的参数
2020/01/06 Python
Python3 webservice接口测试代码详解
2020/06/23 Python
基于python实现ROC曲线绘制广场解析
2020/06/28 Python
2019年Java 最常见的 面试题
2016/10/19 面试题
计算机科学系职业生涯规划书
2014/03/08 职场文书
讲文明知礼仪演讲稿
2014/09/13 职场文书
上诉状格式
2015/05/23 职场文书
高中化学教学反思
2016/02/22 职场文书
python中__slots__节约内存的具体做法
2021/07/04 Python
Python制作春联的示例代码
2022/01/22 Python
java中如何截取字符串最后一位
2022/07/07 Java/Android
clear 万能清除浮动(clearfix:after)
2023/05/21 HTML / CSS