【发布时间】:2017-01-30 12:00:33
【问题描述】:
我有一个应该接受 CVS 文件上传的表单。 所以我用以下方法保护它:
if (!in_array($mimeType, array("text/csv"))) throw new TMSException("Error");
我的所有测试都在我的开发环境中运行良好,但现在我发现,在 Windows 客户端上,对于相同的文件,我得到了不同的 mime 类型。
这是我在我的 Ubuntu PC 上连接时得到的结果:
/var/www/ct/preinvoice.php:203:
array (size=1)
'tariffLines' =>
array (size=5)
'name' => string 'C&T - Labatut.csv' (length=17)
'type' => string 'text/csv' (length=8)
'tmp_name' => string '/tmp/php2vIcaE' (length=14)
'error' => int 0
'size' => int 3812
这就是我尝试从 Windows 机器上传相同文件时得到的结果:
/var/www/ct/preinvoice.php:203:
array (size=1)
'tariffLines' =>
array (size=5)
'name' => string 'C&T - Labatut.csv' (length=17)
'type' => string 'application/vnd.ms-excel' (length=24)
'tmp_name' => string '/tmp/phpPaMvN3' (length=14)
'error' => int 0
'size' => int 3812
知道为什么 PHP 会为同一个文件检测到不同的 mime 类型吗?我该如何解决这个问题?
【问题讨论】:
-
mime 类型可能不是 'text/csv' 某些系统以不同方式读取/保存它们。 (Internet Explorers 将 .csv 文件视为 application/vnd.ms-excel)
-
嗨!我正在使用相同的文件测试上传,并在两个环境中使用 chrome,在 Windows 中,$_FILES["file"]["type"] is 'application/vnd.ms-excel';我想我将不得不使用不同的方法
-
客户端设置 MIME 类型。你无法控制它。
-
可以是同一个文件,只是Windows处理方式不同而已。大多数浏览器都从这里的注册表中提取 mime 类型。