2011-07-18 118 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