我有问题检查图片格式代码:
// 0 means a successful transfer
if ($_FILES["fname"]["error"] > 0) {
$_FILES["fname"]["name"] = "holder.jpg"; // line 3
$imgData = $hyperlink.$_FILES["fname"]["name"]; // line 4
} else {
$imgData = $hyperlink.$_FILES["fname"]["name"];
}
// Only accept files of jpeg format
$img = substr($imgData, 37);
$_FILES["fname"]["type"] = $img;
print "****";
print $_FILES["fname"]["type"];
//print $img;
print "****";
// only accept jpg images pjpeg is for Internet Explorer.. should be jpeg
if (!($_FILES["fname"]["type"] == "image/pjpeg") || !($_FILES["fname"]["type"== "image/jpg")) {
print "I only accept jpg files!";
exit(0);
}
它始终转到第一个if
声明(第3行和第4行)。如果我没有上传图片,当它转到if
语句检查格式时它会给我我只接受jpg文件。我猜它接受它作为字符串,所以它说我只接受jpg文件。
答案 0 :(得分:2)
!($_FILES["fname"]["type"] == "image/pjpeg") || !($_FILES["fname"]["type"== "image/jpg")
与
相同!( ($_FILES["fname"]["type"] == "image/pjpeg") && ($_FILES["fname"]["type"== "image/jpg") )
在这种形式下,您可以更好地看到$ _FILES [“fname”] [“type”]永远不能与“image / pjpeg”和“image / jpeg”相等,因此条件始终为真。
答案 1 :(得分:1)
最好检查文件是否真的是一个jpeg,而不是它提交的mime类型是jpeg。查看exif_imagetype()函数或getimagesize()。
<?php
if (exif_imagetype($_FILES['fname']['tmp_name']) != IMAGETYPE_JPEG) {
echo "Image is not a JPEG!";
exit;
}
如果exif_imagetype不可用,getimagesize应该可以工作:
<?php
if ((list($width, $height, $type, $attr) = getimagesize($_FILES['fname']['tmp_name'])) !== FALSE) {
if ($type != IMAGETYPE_JPEG) {
echo "Image is not a JPEG!";
exit;
}
}