谷歌浏览器上传Excel文件使用PHPfile判断是出错
前言
前几天,刚好在交接师兄之前的项目,一个上传Excel文件,然后读取Excel文件的数据,但是这里有一个判断,是否上传的为Excel文件,如果不是Excel文件会提示错误。但是遇到一点奇葩,用谷歌浏览器上传Excel文件时,文件类型判断为application/octet-stream
,然后用Safari浏览器时,文件类型判断为application/vnd.ms-excel
,(突然想爆粗口),因为这个原因我还以为程序出现问题了。
解决方法
先看看在两个不同浏览器的文件类型:
- 谷歌浏览器下的文件名、文件类型、临时路径
- Safari浏览器下的文件名、文件类型、临时路径
解决方法:
只判断文件后缀名
1.采用pathinfo() 函数
获取后缀名:#输入 print_r(pathinfo("/Applications/MAMP/htdocs/upload/upfile/dq.xls", PATHINFO_EXTENSION)); #输出结果 xls
2.采用正则表达式获取后缀名
#输入 preg_math_all('/\.[a-zA-Z0-9]+/','/Applications/MAMP/htdocs/upload/upfile/dq.xls',$data); print_r( substr(end($data[0]),1) ); #输出结果 xls
通过文件类型判断
采用Fileinfo
方法判断文件类型(使用该方法是需要php_fileinfo
扩展的支持)
#输入 $file_type = new finfo(FILEINFO_MIME_TYPE); $mime_type = $file_type->file('/Applications/MAMP/htdocs/upload/upfile/dq.xls'); print_r($mime_type) #输出结果 application/vnd.ms-excel
不同文件类型输出的格式说明
# Word文档 .doc application/msword .docx application/vnd.openxmlformats-officedocument.wordprocessingml.document # Excel表格 .xls application/vnd.ms-excel .xlsx application/vnd.openxmlformats-officedocument.spreadsheetml.sheet # PPT文件 .ppt application/vnd.ms-powerpoint .pptx application/vnd.openxmlformats-officedocument.presentationml.presentation
个人建议
就我个人认为吧,根据文件的内容判断文件的类型可能容易出错,还是使用判断后缀名的方法比较方便。