zoukankan      html  css  js  c++  java
  • PHP取二进制文件头快速判断文件类型的实现代码

    通过读取文件头信息来识别文件的真实类型。

    一般我们都是按照文件扩展名来判断文件类型,但是这个很不靠谱,轻易就通过修改扩展名来躲避了,一般必须要读取文件信息来识别,PHP扩展中提供了类似 exif_imagetype 这样的函数读取图片类的文件类型,但是很多时候扩展不一定安装了,有时候就需要自己来实现识别文件类型的工作。

    下面代码就展示了自己通过读取文件头信息来识别文件的真实类型。

    <?php
    /**
    * 通过二进制文件头判断文件类型
    * 注明:这是判断 文件类型的根本思路,其它全是浮云
    * 编辑:www.jbxue.com
    */
    $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
  • 相关阅读:
    数据结构的理解
    等价、偏序和全序
    等价、偏序和全序
    二叉树与树的理解
    SICP 习题 (2.10)解题总结: 区间除法中除于零的问题
    div:给div加滚动栏 div的滚动栏设置
    textarea文本域宽度和高度(width、height)自己主动适应变化处理
    OSX: 逻辑卷管理系统Core Storage(1)
    垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想
    string实现
  • 原文地址:https://www.cnblogs.com/study100/p/3237903.html
Copyright © 2011-2022 走看看