php判断文件是否为txt文件
2024-08-30 05:38:15
可以使用pathinfo方法来通过后缀名进行判断文件类型。
/** * 获取文件后缀(如果文件名为11.11,11不是后缀,会默认11为后缀) * $file string 文件路径或者文件名 */ function get_extension($file){ return pathinfo($file, PATHINFO_EXTENSION); }
说明: pathinfo具体使用方法,可以查看php手册。但是该方法仅仅只能根据文件后缀来判断文件类型,如果html后缀的文件,被修改成.php的后缀之后,读取到的则是php类型文件。
$_FILES
如果是php上传文件,则可以用$_FILES[‘uploadfile’][‘type’]来获取文件类型,但是同样会存在和pathinfo同样的问题,该方法仅仅只能根据文件后缀来判断文件类型。
php Fileinfo 获取文件MIME类型(finfo_open)
<?php $finfo = finfo_open(FILEINFO_MIME); // 返回 mime 类型 $filename = '.\Uploads\2.zip'; var_dump(finfo_file($finfo, $filename)); finfo_close($finfo); die;
说明: 如果文件存在则返回文件类型,否则返回false。该方法需要php5.3.0+版本。可以根据返回的结果来判断是什么类型的文件。该方法即便是原文件被改过后缀,已然可以读到原文件类型。
读取文件头六个字节作为判断。
<?php // 官方示例 function minimime($fname) { $fh=fopen($fname,'rb'); if ($fh) { $bytes6=fread($fh,6); fclose($fh); if ($bytes6===false) return false; if (substr($bytes6,0,3)=="\xff\xd8\xff") return 'image/jpeg'; if ($bytes6=="\x89PNG\x0d\x0a") return 'image/png'; if ($bytes6=="GIF87a" || $bytes6=="GIF89a") return 'image/gif'; return 'application/octet-stream'; } return false; } // 将文件头4个字节转换成16进制判断 function fileType($filename) { // 读取文件的前4个字节,根据硬编码判断 $file = fopen ( $filename, "rb" ); $strFile = fread ( $file, 4 ); //只读文件头4字节 fclose ( $file ); $strInfo = @unpack ( "C4chars", $strFile ); //dechex(),把十进制转换为十六进制。 $code = dechex ( $strInfo ['chars1'] ) . dechex ( $strInfo ['chars2'] ) . dechex ( $strInfo ['chars3'] ) . dechex ( $strInfo ['chars4'] ); $type = ''; switch ($code) //硬编码值查表 { case "504b34" : $type = 'application/zip; charset=binary'; break; case "89504e47" : $type = 'image/png; charset=binary'; break; default : $type = false; break; } return $type; }
这个方法有缺陷,不同类型的文件,文件头4个字节可能会相同,并且部分文件类型表示文件类型的字符串,少于4个字节。可以考虑将方法三和方法四结合使用。
最新文章
- Ubuntu服务器被黑经历(ElastichSearch漏洞)
- C#进阶系列——DDD领域驱动设计初探(三):仓储Repository(下)
- try,catch,finally含return时的执行顺序及丢失的伪例
- Tigase XMPP Server的安装
- 关于netstat
- RDIFramework.NET 框架兼容各种数据库类型事务使用范例参考
- [Asp.Net]状态管理(Session、Application、Cache)
- 常用的CSS Hack技术集锦
- hotplug\uevent机制(1)
- Spring Mvc session拦截器实现
- Mylyn
- jQuery 源码学习(先放在这,未开始)
- spring mvc中,直接注入的HttpServletRequst是否安全呢?
- 面试时怎样回答:你对原生ajax的理解
- python异步编程模块asyncio学习(二)
- mysql where in形式存储过程如何传递带有单引号的入参
- Pandas DataFrame笔记
- CF760 D Travel Card 简单DP
- Nodejs Express笔记
- 【HackerRank】Cut the tree
热门文章
- Spring4学习回顾之路11-AOP
- idea 如何加入插件SonarLint
- Django-报错信息及admin后台汉化
- dos(cmd)命令大全(本文摘至于网络)
- Python中的math常用方法总结(转)http://www.cnblogs.com/renpingsheng/p/7171950.html
- CodeFirst实体类中,为什么都把ICollection<;x>;定义成virtual?
- winForm入门学习
- 三调数据库标注插件v1.3
- Python算法题(三)——经典函数题
- HTTP请求方式及其区别