在php中遇到mime类型检测问题

时间:2017-01-30 12:00:33

标签: file-upload mime-types

我有一个应该接受上传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类型的任何想法?我怎么解决这个问题?

1 个答案:

答案 0 :(得分:0)

您可以通过执行以下操作来解决此问题:

$mimetypes = array('application/vnd.ms-excel','text/csv');
if(in_array($_FILES['file']['type'],$mimetypes)){
  // do something
} else {
  die("MIME type is not allowed");
}