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 相关文章推荐
mysql 搜索之简单应用
Apr 27 PHP
PHP编程中字符串处理的5个技巧小结
Nov 13 PHP
php cookie 作用范围?不要在当前页面使用你的cookie
Mar 24 PHP
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
Nov 10 PHP
Ping服务的php实现方法,让网站快速被收录
Feb 04 PHP
php5.5中类级别的常量使用介绍
Oct 02 PHP
php后台如何避免用户直接进入方法实例
Oct 15 PHP
php实现的DateDiff和DateAdd时间函数代码分享
Aug 16 PHP
php实现搜索一维数组元素并删除二维数组对应元素的方法
Jul 06 PHP
php批量删除操作(数据访问)
May 23 PHP
PHP扩展mcrypt实现的AES加密功能示例
Jan 29 PHP
PHP7 新增功能
Mar 09 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通过session id 实现session共享和登录验证的代码
2012/06/03 PHP
PHP获取文件夹大小函数用法实例
2015/07/01 PHP
PHP中include()与require()的区别说明
2017/02/14 PHP
详解提高使用Java反射的效率方法
2019/04/29 PHP
JQuery 表单中textarea字数限制实现代码
2009/12/07 Javascript
jquery分页插件AmSetPager(自写)
2013/04/15 Javascript
利用JS解决ie6不支持max-width,max-height问题的方法
2014/01/02 Javascript
jquery实现省市select下拉框的替换(示例代码)
2014/02/22 Javascript
编写高效jQuery代码的4个原则和5个技巧
2014/04/24 Javascript
js使用post 方式打开新窗口
2015/02/26 Javascript
完美JQuery图片切换效果的简单实现
2016/07/21 Javascript
nodejs连接mysql数据库简单封装示例-mysql模块
2017/04/10 NodeJs
AngularJS实用基础知识_入门必备篇(推荐)
2017/07/10 Javascript
JavaScript事件发布/订阅模式原理与用法分析
2018/08/21 Javascript
对angularjs框架下controller间的传值方法详解
2018/10/08 Javascript
jquery实现动态改变css样式的方法分析
2019/05/27 jQuery
JQuery插件tablesorter表格排序实现过程解析
2020/05/28 jQuery
vue实现登录、注册、退出、跳转等功能
2020/12/23 Vue.js
json.stringify()与json.parse()的区别以及用处
2021/01/25 Javascript
Python中关于Sequence切片的下标问题详解
2017/06/15 Python
Python Flask前后端Ajax交互的方法示例
2018/07/31 Python
Django实现一对多表模型的跨表查询方法
2018/12/18 Python
python如何制作英文字典
2019/06/25 Python
python-OpenCV 实现将数组转换成灰度图和彩图
2020/01/09 Python
解决python多线程报错:AttributeError: Can't pickle local object问题
2020/04/08 Python
phonegap常用事件总结(必看篇)
2017/03/31 HTML / CSS
关于canvas.toDataURL 在iOS运行失败的问题解决
2020/09/16 HTML / CSS
英国领先的奢侈品零售商之一:CRUISE
2016/12/02 全球购物
专注澳大利亚特产和新西兰特产的澳洲中文网:0061澳洲制造
2019/03/24 全球购物
GWebs公司笔试题
2012/05/04 面试题
优秀中专生推荐信
2013/11/17 职场文书
离职证明标准格式
2014/09/15 职场文书
安全生产工作汇报材料
2014/10/28 职场文书
二婚主持词
2015/06/30 职场文书
Python爬取某拍短视频
2021/06/11 Python
分布式Redis Cluster集群搭建与Redis基本用法
2022/02/24 Redis