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横向重复区域显示二法
Sep 25 PHP
通俗易懂的php防注入代码
Apr 07 PHP
深入PHP nl2br()格式化输出的详解
Jun 05 PHP
PHP获取当前页面完整URL的实现代码
Jun 10 PHP
通过php添加xml文档内容的方法
Jan 23 PHP
PHP 实现代码复用的一个方法 traits新特性
Feb 22 PHP
php使用指定编码导出mysql数据到csv文件的方法
Mar 31 PHP
php使用GD库创建图片缩略图的方法
Jun 10 PHP
php数据访问之增删改查操作
May 09 PHP
PDO::_construct讲解
Jan 27 PHP
PHP后台备份MySQL数据库的源码实例
Mar 18 PHP
基于Laravel(5.4版本)的基本增删改查操作方法
Oct 11 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下利用header()函数设置浏览器缓存的代码
2010/09/01 PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
2014/12/17 PHP
php使用curl并发减少后端访问时间的方法分析
2016/05/12 PHP
Prototype Array对象 学习
2009/07/19 Javascript
JavaScript.The.Good.Parts阅读笔记(二)作用域&amp;闭包&amp;减缓全局空间污染
2010/11/16 Javascript
JavaScript中的Truthy和Falsy介绍
2015/01/01 Javascript
javascript实现炫酷的拖动分页
2015/05/11 Javascript
jquery实现带缩略图的全屏图片画廊效果实例
2015/06/25 Javascript
Bootstrap 附加导航(Affix)插件实例详解
2016/06/01 Javascript
jquery插件格式实例分析
2016/06/16 Javascript
jquery基本选择器匹配多个元素的实现方法
2016/09/05 Javascript
学习vue.js条件渲染
2016/12/03 Javascript
JavaScript中数组Array方法详解
2017/02/27 Javascript
基于Require.js使用方法(总结)
2017/10/26 Javascript
vue中node_modules中第三方模块的修改使用详解
2019/05/31 Javascript
vue实现扫码功能
2020/01/17 Javascript
利用 JavaScript 实现并发控制的示例代码
2020/12/31 Javascript
Python修改Excel数据的实例代码
2013/11/01 Python
Python中__init__和__new__的区别详解
2014/07/09 Python
Python设置Socket代理及实现远程摄像头控制的例子
2015/11/13 Python
python opencv之SURF算法示例
2018/02/24 Python
利用Anaconda简单安装scrapy框架的方法
2018/06/13 Python
对python中大文件的导入与导出方法详解
2018/12/28 Python
获取django框架orm query执行的sql语句实现方法分析
2019/06/20 Python
Python多叉树的构造及取出节点数据(treelib)的方法
2019/08/09 Python
python 计算概率密度、累计分布、逆函数的例子
2020/02/25 Python
Python模拟登录requests.Session应用详解
2020/11/17 Python
使用HTML5的链接预取功能(link prefetching)给网站提速
2012/12/13 HTML / CSS
丝芙兰巴西官方商城:SEPHORA巴西
2016/10/31 全球购物
台湾前三大B2C购物网站:MOMO购物网
2017/04/27 全球购物
英国门销售网站:Green Tree Doors
2020/01/07 全球购物
Molton Brown美国官网:奢华美容、香水、沐浴和身体护理
2020/09/02 全球购物
shallow copy和deep copy的区别
2016/05/09 面试题
会计系毕业个人自荐信格式
2013/09/23 职场文书
春节请假条
2014/04/11 职场文书
浅谈mysql执行过程以及顺序
2021/05/12 MySQL