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