zoukankan      html  css  js  c++  java
  • PHP读取文件头(2字节)判断文件类型(转)

    看到此标题或许你会说是否是多此一举,直接判断扩展名不就知道文件类型了吗,但是扩展名很容易伪造,这样就绕过了判断。
    大部分的文件都会将一个特殊的数字或字符存放在文件的特定位置里(开始处的2个字节)

    1. /**
    2. * @author Mckee
    3. * @link http://www.phpddt.com
    4. */
    5. //使用 'b' 来强制使用二进制模式
    6. $fp = fopen('qq.jpg','rb');
    7. //只读二进制文件,前2个字节就可以判断文件类型
    8. $bin = fread($fp,2);
    9. fclose($fp);
    10. //将二进制的字符串转化为格式化的字符串,这里转化为十进制整数
    11. $code = unpack('C2chars', $bin);//这里返回数组,自己看看
    12. $type_code = intval($code['chars1'].$code['chars2']);
    13. $type ='';
    14. switch($type_code){
    15. case255216: $type ='jpg';break;
    16. case7173: $type ='gif';break;
    17. case6677: $type ='bmp';break;
    18. case13780: $type ='png';break;
    19. default: $type ='unknown';
    20. }
    21. echo $type;


    上面这段代码只是引子,并不精准,读者自己研究吧,即使这样也是可以伪造的,如果是图片类型,还有很多人会用getimagesize($file)来判断。

  • 相关阅读:
    Hadoop2.x环境搭建
    HDFS序列化
    Hadoop2.x介绍
    eclipse(1)----ubuntu下的安装与配置
    hive与hbase
    mysql----启动报错
    序列化+protobuff+redis
    爬虫学习笔记(2)--创建scrapy项目&&css选择器
    日常随笔
    spark学习(2)--hadoop安装、配置
  • 原文地址:https://www.cnblogs.com/xingmeng/p/3252481.html
Copyright © 2011-2022 走看看