簡體   English   中英

php - 如何確保上傳的文件是jpg,gif或png?

[英]php - how to make sure that the uploaded file is a jpg, gif or png?

在php中,我可以通過擴展檢查上傳的文件是否具有正確的類型,因此代碼應如下所示:

if ((($_FILES["photo1"]["type"] == "image/gif")
|| ($_FILES["photo1"]["type"] == "image/jpeg")
|| ($_FILES["photo1"]["type"] == "image/png"))
&& ($_FILES["photo1"]["size"] < 500000)) //also limiting size

然后在我的代碼的下一步中,我准備一個文件進行進一步處理。 但是如果有人在上傳之前將text_file.doc或javascript_file.js更改為samplefile.jpg會怎樣?

move_uploaded_file(($_FILES['photo1']['tmp_name']), "photos/1.jpg");
$source1 = imagecreatefromjpeg("../photos/source1.jpg");

然后用戶將看到來自imagecreatefromjpeg步驟的錯誤:

Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: gd-jpeg: JPEG
library reports unrecoverable error: in...

如果文件不是圖形文件而不顯示錯誤,如何跳過處理部分?

正如文件上傳文檔所述,聲明$_FILES['userfile']['type']

文件的mime類型,如果瀏覽器提供了此信息。 一個例子是“image / gif”。 但是,在PHP端沒有檢查這個mime類型,因此不會將其值視為理所當然。

這意味着它不會在php端檢查,你應該使用mime_content_type並確認它的mime類型。

或者,您可以使用getimagesize來實際檢查已上載的文件是否具有圖像大小,如果沒有,則不是圖像。

我會使用getimagesize並檢查可能的錯誤,如下所示:

try {
    $size = getimagesize("your_image_file");
    echo 'image!';
} catch (Exception $e) {
    echo 'no known image format!'; 
}

這個GD功能並不完美,但它可以應對多種圖像文件格式。

有幾種方法可以省略PHP中的警告。 如果發生這樣的錯誤,通常會發生。 要么在你的代碼中期待它(通常是可取的,請參閱我的例子,嘗試使用try ... catch)或者根據你的需要配置你的環境(省略警告)。

首先,您應該編輯php.ini以禁用向用戶輸出警告和錯誤消息,因此這些用戶不會看到錯誤。 至少對於生產系統,建議這樣做。

然后,您應該能夠檢查函數的返回值。 根據http://de.php.net/manual/en/function.imagecreatefromjpeg.php ,如果無法打開您提供的文件,則應返回false。

此外,通過異常處理(請參閱http://www.php.net/manual/en/language.exceptions.php ),您可以捕獲並處理上面發布的錯誤消息和警告。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM