2011-07-18 82 views
0

我需要检查上传文件的类型,以确保它是一个图像。我想要做的是检查MIME文件类型(从$_FILE),然后检查该扩展名。例如:检查文件类型?

function checkType($file){ 

    $ext = pathinfo($_FILES[$file]['name'], PATHINFO_EXTENSION); 
    $mime = $_FILES[$file]['type']; 

    if($mime == "image/jpg" || $mime == "image/jpeg"){ 

     if($ext == "jpg" || $ext == "jpeg"){ 
      return true; 
     } else{ 
      return false; 
     } 

    } 

    if($mime == "image/gif"){ 

     if($ext == "gif"){ 
      return true; 
     } else{ 
      return false; 
     } 

    } 

    if($mime == "image/png"){ 

     if($ext == "png"){ 
      return true; 
     } else{ 
      return false; 
     } 

    } 

} 

这是一个好方法吗?建议?

另外,在最终上传到服务器之前,如何获取图像的宽度?

回答

2

不,它不好。 MIME类型无法匹配实际的文件内容。为了确定你收到了什么样的上传文件(或者如果它实际上是一个图像),你需要检查文件内容。

尝试像getimagesize这样的函数。如果它会返回有效的数据,那么你有一个图像。

3

不应该依赖由$_FILE提供的内容类型,因为它是由浏览器设置的,而不是由您的服务器设置的。

如果您期待图像,您应该使用getimagesize()来获取图像的类型。

例子:

$imagedata = getimagesize($_FILES['image']['tmp_name']); 
$mime = $imagedata['mime']; 

然后,您应该确保$mime不是空的,它包含了你想有一个MIME类型。

以下是使用Google徽标的示例:http://codepad.viper-7.com/9GBDf9

+0

非常感谢。我可以使用'getimagesize'作为图像的宽度吗? – user811348

+0

@ user811348 - 当然可以!看看文档。上面的'$ imagedata'数组的第一个和第二个成员包含高度和宽度。 :) –

+0

太棒了。但有一件事。它不工作。即使我只是将其简化为仅回显MIME类型,它也不会返回任何内容。 – user811348