我试图允许某些格式上传到我的网站。我使用调用getimagesize()
来识别图像类型(作为第三个参数返回)。我跟着this guide来执行此操作。这是代码:
$img=$_FILES['img'];
$info = getimagesize($img);
if (($info[2] !== IMAGETYPE_GIF) && ($info[2] !== IMAGETYPE_JPEG) && ($info[2] !== IMAGETYPE_PNG)) {
echo json_encode(array('bad' => 'Bad Format'));
exit();
} else {
echo json_encode(array('good' => 'Good format'));
exit();
}
无论我尝试上传哪种文件格式,我都会收到else
语句。 echo json_encode(array('good' => 'Good format'));
为什么会发生这种情况,我该如何解决?
答案 0 :(得分:0)
因为您使用的是&&
运算符,所以它总是错误的。
$img=$_FILES['img'];
$accepted = array('image/jpeg','image/png','image/gif');
if (in_array($img['type'],$accepted)) {
echo json_encode(array('bad' => 'Good Format'));
exit();
} else {
echo json_encode(array('good' => 'Bad format'));
exit();
}
使用||
或or
来获得您想要的内容。
使用getimagesize()
$img=$_FILES['img'];
$info = getimagesize($img['tmp_name']); //pass the file
将您的条件更改为||
(或)
if (($info[2] === IMAGETYPE_GIF) || ($info[2] === IMAGETYPE_JPEG) || ($info[2] === IMAGETYPE_PNG)) {
echo json_encode(array('bad' => 'Good Format'));
exit();
} else {
echo json_encode(array('good' => 'Bad format'));
exit();
}
答案 1 :(得分:0)
你使用的是错误的操作员。您正在使用&&
(和),这意味着所有 3如果必须满足条件 ,它才能返回您想要的内容。此外,您正在与const
进行比较,我假设您要将其与字符串进行比较。因此,您可以轻松清理代码,如下所示:
if( !in_array($info[2], array('IMAGETYPE_GIF', 'IMAGETYPE_JPEG','IMAGETYPE_PNG') ) ) {
echo json_encode(array('bad' => 'Good Format'));
exit();
} else {
echo json_encode(array('good' => 'Bad format'));
exit();
}
或实际使用||
(或)运算符来运行您的条件:
if (($info[2] === IMAGETYPE_GIF) || ($info[2] === IMAGETYPE_JPEG) || ($info[2] === IMAGETYPE_PNG)) {
echo json_encode(array('bad' => 'Good Format'));
exit();
} else {
echo json_encode(array('good' => 'Bad format'));
exit();
}