php - 在使用“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\"' ";
}
感谢您花时间阅读本文。
解决方案
我发现问题出在我在数组中用来验证.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/msword
,application/rtf
脚本按预期工作。
现在我正在使用 phpmailer 发送带有 mime 验证的附件。
感谢所有试图以某种方式提供帮助的人。
推荐阅读
- kubernetes - 在 K8s/Istio 上浏览我的 Grafana 部署时出现“上游连接错误”
- android - 应用程序架构分析
- java - “找不到 com.google.firebase:firebase-analytics”
- r - 如何将尾随零添加到字符串的多个部分
- sqlite - VARCHAR 上的 INNER JOIN 编号范围查找
- python - Django 模型未正确更新图像字段(原始内容)
- google-maps-markers - 如何在谷歌地图中设置标记的标题始终可见?
- json - 将 JSON 发送到 Kafka 集群?
- ag-grid - 在 angular-ag-grid 中,如何仅在特定列标题上添加垂直线/分隔符?
- r - 如何使用 R 重命名函数中的输出数据集?