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 相关文章推荐
最令PHP初学者们头痛的十四个问题
Jan 15 PHP
php读取csv实现csv文件下载功能
Dec 18 PHP
CodeIgniter输出中文乱码的两种解决办法
Jun 12 PHP
CentOS下PHP安装Oracle扩展
Feb 15 PHP
再推荐十款免费的php开发工具
Nov 09 PHP
Yii2.0高级框架数据库增删改查的一些操作
Nov 16 PHP
PHP实现可自定义样式的分页类
Mar 29 PHP
Yii2 rbac权限控制操作步骤实例教程
Apr 29 PHP
php简单统计在线人数的方法
May 10 PHP
php实现的mysqldb读写分离操作类示例
Feb 07 PHP
Thinkphp3.2实用篇之计算型验证码示例
Feb 09 PHP
php7基于递归实现删除空文件夹的方法示例
Jun 15 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 防止单引号,双引号在接受页面转义
2008/07/10 PHP
php定界符
2014/06/19 PHP
PHP中提问频率最高的11个面试题和答案
2014/09/02 PHP
PHP.vs.JAVA
2016/04/29 PHP
PHP常见的6个错误提示及解决方法
2016/07/07 PHP
PHP中字符与字节的区别及字符串与字节转换示例
2016/10/15 PHP
服务器安全设置的几个注册表设置
2007/07/28 Javascript
JavaScript入门教程(3) js面向对象
2009/01/31 Javascript
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
2009/02/14 Javascript
jquery控制listbox中项的移动并排序
2009/11/12 Javascript
IE的fireEvent方法概述及应用
2013/02/22 Javascript
js 采用delete实现继承示例代码
2014/05/20 Javascript
使用js实现的简单拖拽效果
2015/03/18 Javascript
JavaScript实现信用卡校验方法
2015/04/07 Javascript
jQuery中$.ajax()和$.getJson()同步处理详解
2015/08/12 Javascript
原生js封装的一些jquery方法(详解)
2016/09/20 Javascript
Angular2 之 路由与导航详细介绍
2017/05/26 Javascript
JS给按钮添加跳转功能类似a标签
2017/05/30 Javascript
js判断一个对象是数组(函数)的方法实例
2019/12/19 Javascript
AI小程序之语音听写来了,十分钟掌握百度大脑语音听写全攻略
2020/03/13 Javascript
linux下安装easy_install的方法
2013/02/10 Python
Python基础之函数用法实例详解
2014/09/10 Python
简单讲解Python中的闭包
2015/08/11 Python
Python使用Srapy框架爬虫模拟登陆并抓取知乎内容
2016/07/02 Python
Python根据当前日期取去年同星期日期
2019/04/14 Python
用Anaconda安装本地python包的方法及路径问题(图文)
2019/07/16 Python
python 实现矩阵填充0的例子
2019/11/29 Python
pyinstaller打包找不到文件的问题解决
2020/04/15 Python
Python读入mnist二进制图像文件并显示实例
2020/04/24 Python
财务副总经理工作职责
2013/11/25 职场文书
摄影助理岗位职责
2014/02/07 职场文书
安全保证书范文
2014/04/29 职场文书
自主招生推荐信范文
2014/05/10 职场文书
2014年禁毒工作总结
2014/11/24 职场文书
酒店厨房管理制度
2015/08/06 职场文书
子女赡养老人协议书
2016/03/23 职场文书