如何在上传时验证图片?

时间:2017-07-27 19:10:58

标签: php file validation image-processing form-submit

我正在玩一些代码,我想知道是否需要这两个代码?

我认为如果我检查过它是图像,那么我就不需要验证是否使用了正确的扩展名。

这似乎是多余的,但我可能没有看到更大的图景。

// 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 个答案:

答案 0 :(得分:1)

PHP documentation中明确提到不要使用getimagesize进行图像验证。

  

注意getimagesize要求filename是有效的图像文件。如果一个   提供非图像文件,它可能被错误地检测为图像   并且函数将成功返回,但数组可能包含   荒谬的价值观。不要使用getimagesize()来检查给定的   文件是有效的图像。使用专门构建的解决方案,如   而是Fileinfo扩展。

因此,您需要对文件mime类型进行更多检查,为了进一步深入研究这种情况,我查看了Codeignitor代码。转到this链接并查看名为_file_mime_type的函数,它们检测文件mime类型,然后它们与允许的文件mime类型匹配。