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 相关文章推荐
第十三节 对象串行化 [13]
Oct 09 PHP
解析php中const与define的应用区别
Jun 18 PHP
具有时效性的php加密解密函数代码
Jun 19 PHP
PHPStrom中实用的功能和快捷键大全
Sep 23 PHP
php实现简易聊天室应用代码
Sep 23 PHP
Yii使用migrate命令执行sql语句的方法
Mar 15 PHP
PHP发送AT指令实例代码
May 26 PHP
PHP对象克隆clone用法示例
Sep 28 PHP
PHP通过CURL实现定时任务的图片抓取功能示例
Oct 03 PHP
php执行多个存储过程的方法【基于thinkPHP】
Nov 08 PHP
ThinkPHP框架实现数据增删改
May 07 PHP
php判断目录存在的简单方法
Sep 26 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实现点击可刷新验证码
2015/11/07 PHP
PHP中常见的密码处理方式和建议总结
2018/10/14 PHP
PHP 7.4中使用预加载的方法详解
2019/07/08 PHP
分享几种好用的PHP自定义加密函数(可逆/不可逆)
2020/09/15 PHP
jquery 防止表单重复提交代码
2010/01/21 Javascript
jQuery之$(document).ready()使用介绍
2012/04/05 Javascript
document.compatMode的CSS1compat使用介绍
2014/04/03 Javascript
JavaScript中通过prototype属性共享属性和方法的技巧实例
2015/03/13 Javascript
javascript实现全局匹配并替换的方法
2015/04/27 Javascript
jquery实现页面常用的返回顶部效果
2016/03/04 Javascript
JavaScript进阶练习及简单实例分析
2016/06/03 Javascript
Angular Module声明和获取重载实例代码
2016/09/14 Javascript
Vue中的slot使用插槽分发内容的方法
2018/03/01 Javascript
iview table高度动态设置方法
2018/03/14 Javascript
Vue项目中使用jquery的简单方法
2019/05/16 jQuery
JS如何操作DOM基于表格动态展示数据
2020/10/15 Javascript
解决vue使用vant轮播组件swipe + flex时文字抖动问题
2021/01/07 Vue.js
用python代码做configure文件
2014/07/20 Python
在Python下使用Txt2Html实现网页过滤代理的教程
2015/04/11 Python
python安装以及IDE的配置教程
2015/04/29 Python
为Python的web框架编写前端模版的教程
2015/04/30 Python
Python从MP3文件获取id3的方法
2015/06/15 Python
详解Python之unittest单元测试代码
2018/01/24 Python
python中numpy的矩阵、多维数组的用法
2018/02/05 Python
基于随机梯度下降的矩阵分解推荐算法(python)
2018/08/31 Python
基于python实现高速视频传输程序
2019/05/05 Python
Apache,wsgi,django 程序部署配置方法详解
2019/07/01 Python
使用Keras构造简单的CNN网络实例
2020/06/29 Python
Biblibili视频投稿接口分析并以Python实现自动投稿功能
2021/02/05 Python
新西兰优惠网站:Treat Me
2019/07/04 全球购物
Gerry Weber德国官网:优质女性时装,德国最大的时装公司之一
2019/11/02 全球购物
社团2014年植树节活动总结
2014/03/11 职场文书
2015年档案管理员工作总结
2015/05/13 职场文书
培根随笔读书笔记
2015/07/01 职场文书
《怀念母亲》教学反思
2016/02/19 职场文书
导游词之无锡丝业博物馆
2019/11/12 职场文书