我正在玩一些代码,我想知道是否需要这两个代码?
我认为如果我检查过它是图像,那么我就不需要验证是否使用了正确的扩展名。
这似乎是多余的,但我可能没有看到更大的图景。
// 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;
}
我将调整大小并可能更改扩展名,这样我就不必将其存储在数据库中。
答案 0 :(得分:1)
在PHP documentation中明确提到不要使用getimagesize
进行图像验证。
注意getimagesize要求filename是有效的图像文件。如果一个 提供非图像文件,它可能被错误地检测为图像 并且函数将成功返回,但数组可能包含 荒谬的价值观。不要使用getimagesize()来检查给定的 文件是有效的图像。使用专门构建的解决方案,如 而是Fileinfo扩展。
因此,您需要对文件mime类型进行更多检查,为了进一步深入研究这种情况,我查看了Codeignitor代码。转到this链接并查看名为_file_mime_type
的函数,它们检测文件mime类型,然后它们与允许的文件mime类型匹配。