允许某些图片格式不起作用

时间:2015-11-13 00:07:18

标签: php getimagesize

我试图允许某些格式上传到我的网站。我使用调用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'));

为什么会发生这种情况,我该如何解决?

2 个答案:

答案 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();
}