首页 > 解决方案 > 在使用“finfo”PHP 类执行 mime/扩展验证脚本期间,“rtf”文件扩展名消失了

问题描述

我正在尝试使用"extension X mime"文件值通过 phpmailer 创建上传文件的交叉验证,系统正在处理我需要执行此操作的几乎所有文件,但.rtf脚本无法正常工作的文件例外。

扩展名消失了,如果文件是.rtf. 我正在使用这个脚本:https ://stackoverflow.com/a/33349901/4623271进行了一些修改。

代码中的波纹管是变量$ext,我可以在其中获取验证允许的任何文件的扩展名,除了.rtf文件,当文件为 a 时.rtf,该变量显然为空。

我尝试使用$ext = end(explode(".", $_FILES["uploadedFile"]["name"]));但以同样的方式,当是.rtf文件时,变量变为空。

    // mime verification
    $finfo = new finfo(FILEINFO_MIME_TYPE);
    if (false === $ext = array_search(
        $finfo->file($_FILES['uploadedFile']['tmp_name']),
        array(
            'doc' => 'application/msword',
            'docx'  => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
            'rtf' => 'application/msword',
            'odt' => 'application/vnd.oasis.opendocument.text',
            'txt' => 'text/plain',
            'pdf' => 'application/pdf',
        ),
        true
    )) {
         $errorMsg .= "<br> Please, watch that the formats allowed are: \"doc\", \"docx\", \"rtf\", \"odt\", \"txt\", \"pdf\"' ";
    }

感谢您花时间阅读本文。

标签: phpuploadmimertf

解决方案


我发现问题出在我在数组中用来验证.rtf文件的 mime 值中。

读取的 mime 类型$finfo = new finfo(FILEINFO_MIME_TYPE);不是在具有此类信息的在线表格中找到的通常 mime 类型,并且我已使用它来创建初始数组。

在巴西 PHP Telegram 群中寻求帮助后,我收到了分析$finfo变量值的提示。

当我申请时var_dump ($finfo->file($_FILES['uploadedFile']['tmp_name']));,我发现文件FILEINFO_MIME_TYPE的 mime.rtf是:text/rtf而不是application/rtf,正如我上面所说,是.rtf文件 mime 类型的最常见选项。

因此,由于脚本预期text/rtf.rtf文件关联,因此发生了验证错误。

text/rtf在我更改or的键值后application/mswordapplication/rtf脚本按预期工作。

现在我正在使用 phpmailer 发送带有 mime 验证的附件。

感谢所有试图以某种方式提供帮助的人。


推荐阅读