`

PHP通过图片文件头信息来识别图片的类型【扩展名】

    博客分类:
  • PHP
 
阅读更多

 

$file = @fopen('包含路径的文件名', "rb");
$bin = fread($file, 15); //只读15字节 各个不同文件类型,头信息不一样。
if(true === get_type_list($bin)) {
    echo '该图片在指定的图片格式中';
}
else{
    echo '该图片上传格式错误';
  }
  
   
/**
* 得到文件头与文件类型映射表*
* author wengxianhu
* @param $bin string 图片的二进制前一段字符
* @return boolean
*/
public function get_type_list($bin)
{
    $array = array(
        array("FFD8FFE1","jpg"),
        array("89504E47","png"),
        array("47494638","gif"),
        array("FFD8FFE000104A46", "jpeg")
//         array("49492A00","tif"),
//         array("424D","bmp"),
//         array("41433130","dwg"),
//         array("38425053","psd"),
//         array("7B5C727466","rtf"),
//         array("3C3F786D6C","xml"),
//         array("68746D6C3E","html"),
//         array("44656C69766572792D646174","eml"),
//         array("CFAD12FEC5FD746F","dbx"),
//         array("2142444E","pst"),
//         array("D0CF11E0","xls/doc"),
//         array("5374616E64617264204A","mdb"),
//         array("FF575043","wpd"),
//         array("252150532D41646F6265","eps/ps"),
//         array("255044462D312E","pdf"),
//         array("E3828596","pwl"),
//         array("504B0304","zip"),
//         array("52617221","rar"),
//         array("57415645","wav"),
//         array("41564920","avi"),
//         array("2E7261FD","ram"),
//         array("2E524D46","rm"),
//         array("000001BA","mpg"),
//         array("000001B3","mpg"),
//         array("6D6F6F76","mov"),
//         array("3026B2758E66CF11","asf"),
//         array("4D546864","mid"),
//         array("D3C3BBA7", 'csv')
    );
   
    foreach ($array as $v)
    {
        $blen = strlen(pack("H*", $v[0])); //得到文件头标记字节数
        $tbin = substr($bin, 0, intval($blen)); ///需要比较文件头长度
        if(strtolower($v[0]) == strtolower(array_shift(unpack("H*", $tbin))))
        {
            return true;
        }
    }
    return false;
}

 

分享到:
评论

相关推荐

    PHP取二进制文件头快速判断文件类型的实现代码

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

    php通过文件头检测文件类型通用代码类(zip,rar等)

    在做web应用时候,通过web扩展名判断上存文件类型,这个是我们常使用的。

    Editplus 3[1].0

    ③ “文件-新建-text”,就可以建立一个空的文本文件,保存时,这个文件自动带有扩展名".txt",也就避免了令人头疼的确认 ④ 模板设置文件名称为“template.ini”,如果和主程序同一路径,可以使用相对路径 罗嗦了...

    editplus 代码编辑器html c++ jsp css

    ③ “文件-新建-text”,就可以建立一个空的文本文件,保存时,这个文件自动带有扩展名".txt",也就避免了令人头疼的确认 ④ 模板设置文件名称为“template.ini”,如果和主程序同一路径,可以使用相对路径 罗嗦了...

    scws23-php

    而自动识别(后缀名为小写,如:dict.xdb, dict.sqlite ...) 目前推荐和默认采用 XDB 格式,这是专为 SCWS 开发而且采用纯 PHP 代码实现的 XTreeDB,效率 非常不错,比 CDB 还略快。 其它格式仅作简介,一般也...

    EditPlus 2整理信箱的工具

    ③ “文件-新建-text”,就可以建立一个空的文本文件,保存时,这个文件自动带有扩展名".txt",也就避免了令人头疼的确认 ④ 模板设置文件名称为“template.ini”,如果和主程序同一路径,可以使用相对路径 罗嗦了...

    KODExplorer 芒果云-资源管理器

    - 文件扩展名处理,分为用户方式和扩展名权限方式 - 上传结束提示:是否成功、失败原因 - 上传扩展名限制 解决apache .php.*当做php执行bug - 文件名非法字符限定 - 树目录展开箭头状态修复 - 树目录新建文件...

    zzzphp免费开源建站系统含手机站 v1.6.6 Build20190513.zip

    模式设置:支持动态,静态,伪静态,缓存,自定更新频率设定,可设定前台页面扩展名。 静态列表:可直接编辑静态页面,支持一键清空。 缓存列表:仅支持前台缓存页面编辑,支持一键清空(清空功能包含后台页面)。...

    JAVA上百实例源码以及开源项目

    5个目标文件,演示Address EJB的实现,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...

    帝国下载系统 v2.5 开源正式版 bulid 090613

    8、下载与在线地址支持上传文件并自动填写文件扩展名及大小;支持直接上传与选择附件目录文件两种方式。 9、支持内容页文件名自定义。 10、新增下载地址前缀功能,同时支持"HEADER"、"META"、"READ"三种下载方式。 ...

    帝国下载系统 v2.5 开源正式版 bulid 090613.rar

    8、下载与在线地址支持上传文件并自动填写文件扩展名及大小;支持直接上传与选择附件目录文件两种方式。 9、支持内容页文件名自定义。 10、新增下载地址前缀功能,同时支持"HEADER"、"META"、"READ"三种下载方式。...

    JAVA上百实例源码以及开源项目源代码

    5个目标文件,演示Address EJB的实现 ,创建一个EJB测试客户端,得到名字上下文,查询jndi名,通过强制转型得到Home接口,getInitialContext()函数返回一个经过初始化的上下文,用client的getHome()函数调用Home接口...

    pscws23-20081221.tar.bz2【中文分词】

    而自动识别(后缀名为小写,如:dict.xdb, dict.sqlite ...) 目前推荐和默认采用 XDB 格式,这是专为 SCWS 开发而且采用纯 PHP 代码实现的 XTreeDB,效率 非常不错,比 CDB 还略快。 其它格式仅作简介,一般也...

    帝国下载系统 v2.5 开源正式版 bulid 090416.rar

    8、下载与在线地址支持上传文件并自动填写文件扩展名及大小;支持直接上传与选择附件目录文件两种方式。 9、支持内容页文件名自定义。 10、新增下载地址前缀功能,同时支持"HEADER"、"META"、"READ"三种下载方式。...

    grub4dos-V0.4.6a-2017-02-04更新

    根据短文件名偏移 0x0c 处:位 3=1 表示文件名小写,位 4=1 表示文件扩展名小写。 4.可以正确识别 mkisofs 2.00/2.01 生成有 bug 的 Joliet 格式光盘。 2013-10-18 1.新增功能类似CMD的PATHEXT,可以设置默认的...

    ASP.Net.Web程序设计

    一般HTML的网页文件都是以.htm为扩展名,浏览器会按照Tag语法做解释并加以处理.htm文件的内容,按照其指定方式将文字、图片等多媒体数据显示或播放出来。即使用HTML语言描述的文件,需要通过WWW浏览器显示出效果。 2...

    MYSQL中文手册

    2.3.6. 通过非安装Zip文件安装MySQL 2.3.7. 提取安装档案文件 2.3.8. 创建选项文件 2.3.9. 选择MySQL服务器类型 2.3.10. 首次启动服务器 2.3.11. 从Windows命令行启动MySQL 2.3.12. 以Windows服务方式启动...

    [完整][中文][WEB安全测试].(美)霍普.扫描版.pdf

    7.9 通过假造Referer头信息来伪造工作流程 152 7.10 仅获取HTTP头 153 7.11 使用cURL发送POST请求 154 7.12 保持会话状态 156 7.13 操纵Cookie 157 7.14 使用cURL上传文件 158 7.15 建立多级测试用例 159 7.16 结论 ...

    zzzphp免费开源建站系统含手机站

    模式设置:支持动态,静态,伪静态,缓存,自定更新频率设定,可设定前台页面扩展名。静态列表:可直接编辑静态页面,支持一键清空。缓存列表:仅支持前台缓存页面编辑,支持一键清空(清空功能包含后台页面)。网站...

Global site tag (gtag.js) - Google Analytics