MENU

谷歌浏览器上传Excel文件使用PHPfile判断是出错

前言

前几天,刚好在交接师兄之前的项目,一个上传Excel文件,然后读取Excel文件的数据,但是这里有一个判断,是否上传的为Excel文件,如果不是Excel文件会提示错误。但是遇到一点奇葩,用谷歌浏览器上传Excel文件时,文件类型判断为application/octet-stream,然后用Safari浏览器时,文件类型判断为application/vnd.ms-excel,(突然想爆粗口),因为这个原因我还以为程序出现问题了。

解决方法

先看看在两个不同浏览器的文件类型:

  • 谷歌浏览器下的文件名、文件类型、临时路径
    38-1
  • Safari浏览器下的文件名、文件类型、临时路径
    38-2

解决方法:

  • 只判断文件后缀名
    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扩展的支持)
    38-3

    #输入
    $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
    

个人建议

就我个人认为吧,根据文件的内容判断文件的类型可能容易出错,还是使用判断后缀名的方法比较方便。

标签: php, 技巧
返回文章列表 文章二维码 打赏
本页链接的二维码
打赏二维码