Я пытаюсь разрешить загрузку определенных форматов на мой сайт. Я использую 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'));
Почему это происходит, и как я могу это исправить?
он всегда будет ложным, так как вы используете оператор &&
.
$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, если условия должны быть выполнены, чтобы вернуть то, что вы хотите. Кроме того, вы сравниваете с 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();
}
const
-IMAGETYPE_JPEG
, помещаете их в кавычки для сравнения в виде строки -'IMAGETYPE_JPEG'
. Кроме того, вы используете&&
(и), вы хотите использовать||
(или же).