Разрешить определенные форматы изображений не работает

1

Я пытаюсь разрешить загрузку определенных форматов на мой сайт. Я использую call getimagesize() для идентификации типа изображения (который возвращается в качестве третьего параметра). Я выполнил это руководство, чтобы выполнить это. Здесь код:

$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
    Вы сравниваете с const - IMAGETYPE_JPEG , помещаете их в кавычки для сравнения в виде строки - 'IMAGETYPE_JPEG' . Кроме того, вы используете && (и), вы хотите использовать || (или же).
Теги:

2 ответа

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();
}
  • 0
    Я пробовал это, но теперь я получаю первое заявление, если все время
  • 0
    ответ обновлен.
Показать ещё 4 комментария
0

Вы используете неправильный оператор. Вы используете && (и), что означает ALL 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();
}
  • 0
    Я попробовал оба примера, и теперь я получаю первое утверждение if.
  • 0
    @ Слишком легко!
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню