思路:通过文件头确定文件类型,可使用Notepad++以16进制查看文件头。

方法一:

// 获取mime type
print_r(mime_content_type($path));

输出:image/svg+xml

方法二:

function test()
{$file_type_start = ["ffd8ffe000104a464946" => "jpg", //JPEG (jpg)"89504e470d0a1a0a0000" => "png", //PNG (png)"47494638396126026f01" => "gif", //GIF (gif)"49492a00227105008037" => "tif", //TIFF (tif)"424d228c010000000000" => "bmp", //16色位图(bmp)"424d8240090000000000" => "bmp", //24位位图(bmp)"424d8e1b030000000000" => "bmp", //256色位图(bmp)"41433130313500000000" => "dwg", //CAD (dwg)"3c21444f435459504520" => "html", //HTML (html)"3c21646f637479706520" => "htm", //HTM (htm)"48544d4c207b0d0a0942" => "css", //css"696b2e71623d696b2e71" => "js", //js"7b5c727466315c616e73" => "rtf", //Rich Text Format (rtf)"38425053000100000000" => "psd", //Photoshop (psd)"46726f6d3a203d3f6762" => "eml", //Email [Outlook Express 6] (eml)"d0cf11e0a1b11ae10000" => "doc", //MS Excel 注意:word、msi 和 excel的文件头一样"d0cf11e0a1b11ae10000" => "vsd", //Visio 绘图"5374616E64617264204A" => "mdb", //MS Access (mdb)"252150532D41646F6265" => "ps","255044462d312e350d0a" => "pdf", //Adobe Acrobat (pdf)"2e524d46000000120001" => "rmvb", //rmvb/rm相同"464c5601050000000900" => "flv", //flv与f4v相同"00000020667479706d70" => "mp4","49443303000000002176" => "mp3","000001ba210001000180" => "mpg", //"3026b2758e66cf11a6d9" => "wmv", //wmv与asf相同"52494646e27807005741" => "wav", //Wave (wav)"52494646d07d60074156" => "avi","4d546864000000060001" => "mid", //MIDI (mid)"504b0304140000000800" => "zip","526172211a0700cf9073" => "rar","235468697320636f6e66" => "ini","504b03040a0000000000" => "jar","4d5a9000030000000400" => "exe",//可执行文件"3c25402070616765206c" => "jsp",//jsp文件"4d616e69666573742d56" => "mf",//MF文件"3c3f786d6c2076657273" => "xml or svg",//xml文件"494e5345525420494e54" => "sql",//xml文件"7061636b616765207765" => "java",//java文件"406563686f206f66660d" => "bat",//bat文件"1f8b0800000000000000" => "gz",//gz文件"6c6f67346a2e726f6f74" => "properties",//bat文件"cafebabe0000002e0041" => "class",//bat文件"49545346030000006000" => "chm",//bat文件"04000000010000001300" => "mxp",//bat文件"504b0304140006000800" => "docx",//docx文件"d0cf11e0a1b11ae10000" => "wps",//WPS文字wps、表格et、演示dps都是一样的"6431303a637265617465" => "torrent","d4c3b2a1020004000000" => "pcap", // 网络抓包文件"6D6F6F76" => "mov", //Quicktime (mov)"FF575043" => "wpd", //WordPerfect (wpd)"CFAD12FEC5FD746F" => "dbx", //Outlook Express (dbx)"2142444E" => "pst", //Outlook (pst)"AC9EBD8F" => "qdf", //Quicken (qdf)"E3828596" => "pwl", //Windows Password (pwl)"2E7261FD" => "ram", //Real Audio (ram)];$file_path_list = ['D:\test_image\开源协议选择流程图-1 - 副本.txt','D:\test_image\aaa.webp','D:\test_image\1635832464(1).png','D:\test_image\dump.pcap','D:\test_image\aitest.svg',];foreach ($file_path_list as $path) {$file = fopen($path, 'rw');$str = fread($file, 10);$str_to_hex= bin2hex($str);$file_type = '未知';$file_type_str = $str_to_hex;if (isset($file_type_start[$str_to_hex])) {$file_type = $file_type_start[$str_to_hex];} else {foreach ($file_type_start as $key => $val) {if (strpos(strtolower($str_to_hex), strtolower($key)) === 0) {$file_type = $val;$file_type_str = strtolower($key);break;}}}echo "文件:" . $path . ':' . "</br>";echo "开头文本:" . $str . ' 长度:' . strlen($str) . "</br>";echo "开头文本hex:" . $str_to_hex . ' 长度:' . strlen($str_to_hex) . "</br>";echo '文件类型:' . $file_type . "(start:". $file_type_str . ")" . "</br>";if (@getimagesize($path)) {echo '是有效的图片' . "</br>";} else {echo '无效的图片' . '</br>';}echo "</br>";fclose($file);}
}

输出:

文件:D:\test_image\开源协议选择流程图-1 - 副本.txt:
开头文本:����JFIF 长度:10
开头文本hex:ffd8ffe000104a464946 长度:20
文件类型:jpg(start:ffd8ffe000104a464946)
是有效的图片文件:D:\test_image\aaa.webp:
开头文本:����JFIF 长度:10
开头文本hex:ffd8ffe000104a464946 长度:20
文件类型:jpg(start:ffd8ffe000104a464946)
是有效的图片文件:D:\test_image\1635832464(1).png:
开头文本:�PNG  长度:10
开头文本hex:89504e470d0a1a0a0000 长度:20
文件类型:png(start:89504e470d0a1a0a0000)
是有效的图片文件:D:\test_image\dump.pcap:
开头文本:�ò� 长度:10
开头文本hex:d4c3b2a1020004000000 长度:20
文件类型:pcap(start:d4c3b2a1020004000000)
无效的图片文件:D:\test_image\aitest.svg:
开头文本:开头文本hex:3c3f786d6c2076657273 长度:20
文件类型:xml or svg(start:3c3f786d6c2076657273)
无效的图片

16进制文件头(相关:JPG文件头结构介绍)

参考链接:
notepad怎么查看16进制编码
根据文件头数据判断文件类型
PHP图片损坏检测
JPG文件头结构介绍
理解JPEG文件头的格式

PHP 查看真实文件类型、图片有效性相关推荐

  1. PHP 八羊闪电本地相册图片查看器V1 PHP极简代码直接查看本地文件夹图片 源码下载!

    该源码,直接读取本地IMGAGES文件夹的图片,直接显示在相册,点击放大查看,非常方便,非常适合二次开发,但是不适合小白.没有做UI和设计,比较简陋,所以仅仅售价10元钱,想要的就拿去,不想要的就别拍 ...

  2. 实战 - 文件上传功能:校验文件类型,文件大小,获取文件真实类型

    文件上传的漏洞和防御-设置黑名单和白名单 以PHP脚本语言为例,一些文件上传功能实现代码没有严格限制用户上传的文件后缀以及文件类型,导致允许攻击者向某个可通过Web访问的目录上传任意PHP文件,并能够 ...

  3. vue图片转file文件类型

    vue图片转为File文件类型 供参考,欢迎指教 文章目录 vue图片转为File文件类型 图片转为base64格式 base64格式转为File文件类型 使用 File文件转base64格式 使用 ...

  4. 文件类型识别----魔数

    魔数简介: 在识别文件类型时,我们很多人都是通过文件的后缀来识别的,如苍老师.mp4, 波老师.avi, 玛利亚.jpg. 使用后缀名识别文件类型不是特别准确,尤其是后缀民可以手动修改的情况下. 另外 ...

  5. Linux上的文件类型与默认图标

    引言 也许小伙伴们对 Linux 已经有一定程度的了解,或者已经是一名能够在工作和生活中活用它的 Linux 用户了.随着桌面环境的不断发展,Linux 系统已经不再仅仅是一个面向极客和开发者的操作系 ...

  6. 各种文件对应的文件类型

    使用file查看各种文件类型,结果如下: 带后缀的文件的类型: .c后缀文件:C source, ASCII text或C source, ASCII text, with CRLF line ter ...

  7. Linux上的文件类型与默认图标(转)

    发布时间:2018-12-12 17:43:09 点击次数:2598 引言 也许小伙伴们对 Linux 已经有一定程度的了解,或者已经是一名能够在工作和生活中活用它的 Linux 用户了.随着桌面环境 ...

  8. Discuz论坛中新增文件类型图标的方法

    # 新增文件类型图标的方法 ​    pptx文件不在论坛默认的文件类型范围之内,因此上传的pptx文件图标显示为未知,这对于我这种强迫症患者怎么可以忍受,解决方案如下 ## 图片文件的下载 ​    ...

  9. linux查看文件元数据,Linux切换目录、查看目录下的文件、文件类型介绍和查看文件的元数据信息...

    本篇博客介绍几个Linux的基础命令:写的如有不足,还望读者不吝赐教! 切换目录 cd(ChangeDirectory)切换工作目录 语法:cd  [要切换的目录] cd:进入用户的宿主目录(回家) ...

最新文章

  1. 历史数据如何处理_数据库表数据量大读写缓慢如何优化(1)【冷热分离】
  2. 修改页面后获得flag_互动征集丨是时候为2021立flag了
  3. 2020年度工作计划_2020最新年度个人工作计划(精选3篇)
  4. Python DbUtil操作数据
  5. dictionary在python中什么意思_Python 字典(Dictionary)操作详解
  6. 对应猎豹网校的lua 视频教程 做的学习记录 前三课简单介绍1-3
  7. 第五团队谷歌浏览器软件与用户体验调查与分析
  8. (转)DPDK内存管理 02 -----初始化
  9. JAVA实用教程(第2版)配套源码笔记
  10. office2019安装D盘_office2016or2019安装在D盘的方法-可收藏备用
  11. 超详细讲解:数据库的备份与数据恢复方法举例与说明(完全备份、差异备份、增量备份)
  12. div和div之间画横线_HTML在两个div标签中间画一条竖线的方法
  13. Centos 7 虚拟机安装 jenkins
  14. Opencv Surf特征实现图像无缝拼接生成全景图像(三)
  15. zblog php 自适应,ZblogPhp模版-BlogCms+自适应
  16. egg使用egg-socket.io
  17. 来来来开小灶了,年后求职和跳槽的看过来,悄悄的看悄悄的收藏
  18. 电脑耳机没有声音,前面板耳机孔没声音
  19. AS608光学指纹识别模块 智能锁/考勤门禁开发/指纹采集模块
  20. 〖产品思维训练白宝书 - 产品思维认知篇⑪〗- 学习 产品思维 对我们有哪些好处?

热门文章

  1. Linux定时任务详解
  2. springboot农村饮用水海量数据存储平台毕业设计源码061205
  3. 拼多多2021高频题汇总 | 备战春招,刷这30题就够了!
  4. python撤回上一条命令_python 中执行上一句话,请教问题,怎么也才能使python执行完上一个命令,再执行下一条语句...
  5. 搜索引擎的原理,架构与细节
  6. ubuntu18完全安装Openpose指南
  7. 041 :魔法方法:构造和析构
  8. FATFS 移植和配置分析
  9. 软件测试真的干不到35岁吗?那咋办呢...我36了...
  10. 博士学位真的那么重要吗?上交大博士亲述科研心路,获4万高赞!