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
  • 相关阅读:
    归并排序的java实现
    Hanoi问题java解法
    j2ee之Filter使用实例(页面跳转)
    java工具类之Graphics
    java程序设计之循环链表
    Java程序设计求出岁数
    Java程序设计之链表结构
    CENTOS 6 通过YUM升级GCC到4.7/4.8
    Object c的NSString的使用,创建,拼接和分隔,子string,substring
    Let’s Encrypt 最近很火的免费SSL 使用教程
  • 原文地址:https://www.cnblogs.com/study100/p/3237903.html
Copyright © 2011-2022 走看看