2017-07-27 69 views
0

我在玩弄一些代碼,想知道這些是否都需要?如何驗證上傳圖片?

我會認爲,如果我已檢查它是一個圖像,那麼我不需要驗證是否使用了正確的擴展名。

這似乎是多餘的,但我可能沒有看到更大的圖片。

// Check if image file is a actual image or fake image 
if(isset($_POST["submit"])) { 
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]); 
    if($check !== false) { 
     echo "File is an image - " . $check["mime"] . "."; 
     $uploadOk = 1; 
    } else { 
     echo "File is not an image."; 
     $uploadOk = 0; 
    } 
} 

// Allow certain file formats 
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" 
    && $imageFileType != "gif") { 
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; 
    $uploadOk = 0; 
} 

我將調整大小並可能更改擴展名,這樣我就不必將其存儲在數據庫中。

+1

我同意你的意見。擴展並不總是正確的。測試它是否真的是一個圖像會更可靠。 – Octopus

+2

那麼,如果你省略了第二位,並且有人上傳了TIFF,它就會說謊,並告訴他們TIFF不是圖像;( – WheatBeak

+0

@WheatBeak,我剛剛測試過一個TIFF,它以圖像形式返回 – harkly

回答

1

PHP documentation明確提到不使用getimagesize進行圖像驗證。

小心getimagesize希望文件名是一個有效的圖像文件。如果提供了 非圖像文件,則可能會錯誤地將其檢測爲圖像 ,並且該函數將成功返回,但該數組可能包含 無意義的值。不要使用getimagesize()來檢查給定的 文件是否是有效的圖像。改爲使用專用的解決方案,如 Fileinfo擴展。

因此,您需要更多關於文件MIME類型的檢查,爲了深入挖掘此場景,我研究了Codeignitor代碼。轉到this鏈接並查看名爲_file_mime_type的函數,在這裏它們檢測文件MIME類型,之後它們與允許的文件MIME類型匹配。

+0

謝謝,我會解決這個問題:getimagesize – harkly