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

Allow certain image formats not working

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

为什么会这样,我该如何解决?

它将始终为 false,因为您使用的是 && 运算符。

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

您用错了运算符。您正在使用 &&(和),这意味着 ALL 3 如果条件 必须满足 才能 return 你想要什么。此外,您正在与 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();
}