如何使用MIME验证文件?

时间:2012-05-18 13:02:25

标签: php javascript jquery ajax

我想使用php验证服务器中的文件类型。现在,我已经通过检查文件的文件扩展名类型来验证它。这会产生罚款,但问题是,这不是验证文件作为用户的最佳方式,更改允许将文本文件写入jpeg并仍然能够上传它。

所以我想要做的是添加另一种验证方法,我还想使用php检查文件的MIME类型,以识别文件是图像,视频还是音频。

所以我的问题是如何编码以便我可以在php中使用MIME类型来验证文件?此外,如果我有一个非常大的文件,是否需要很长时间才能启动MIME验证或立即验证?

下面是我目前只有Image的代码,它使用php代码来检查文件类型:

<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Error: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Type: " . $_FILES["file"]["type"] . "<br />";
    }
  }
else
  {
  echo "Invalid file";
  }
?> 

2 个答案:

答案 0 :(得分:3)

MIME类型查找通常非常快,在PHP中,您可以使用finfo扩展名来执行此操作。例如:

$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimetype = finfo_file($finfo, '/path/to/file.jpg'); // image/jpeg
finfo_close($finfo);

此外,您不应该依赖type超全局的$_FILES索引,因为该值可能被欺骗到攻击者可能想要的任何内容。当然,文件扩展名也是如此。

答案 1 :(得分:0)

您可以使用getID3()getimagesize也可以让你放心。

这里的javascript代码似乎无关紧要。另外,您可能知道$_FILES中指示的类型只能被视为来自用户/浏览器的建议。