我正在尝试测试上传的文件是否是我想要的图像类型。如果它不是gif,jpeg,png,它应该回应“问题”。但是当我执行这段代码时,它总是说有一个问题。我的if语句出了什么问题?
$uploadfile_type=$_FILES['userfile']['type'];
if ( ($uploadfile_type !='image/gif') || ($uploadfile_type !='image/jpeg')
|| ($uploadfile_type !='image/png'))
{
echo 'Problem: file is not a gif or jpeg or png!';
exit;
}
当我只检查一种类型的图像时,此代码有效。例如:if($ uploadfile_type!='image / gif') - >这个陈述会起作用,但是当我添加OR时它不会。
答案 0 :(得分:5)
当您使用AND(||
)时,您正在使用OR(&&
)。如果它不是GIF 并且它不是JPG 和它不是PNG,你想说有问题。使用OR,它不会说有问题的唯一方法是,如果你有某种类型的文件同时成为所有3种类型。
答案 1 :(得分:2)
有一个谜语:
我的口袋里有两枚硬币。其 总价值是三十美分。之一 它们不是镍。它们是什么?
答案是它们是四分之一和镍 - 本季度满足“其中一个不是镍”的条件。这是你面临的一个问题。 每个文件都是not a gif
或not a jpeg
- 甚至是gif和jpeg。 GIF是not jpegs
,jpeg是not gifs
。因此,正如其他人所说,您需要使用AND
而不是OR
。
答案 2 :(得分:1)
您应该定义已接受的mimetypes列表:
$accepted_types = array(
'image/gif',
'image/jpeg',
'image/png',
);
$uploadfile_type=$_FILES['userfile']['type'];
if (!in_array($uploadfile_type, $accepted_types))
{
echo 'Problem: file is not a gif or jpeg or png!';
exit;
}
我希望这会有所帮助, 杰罗姆瓦格纳
答案 3 :(得分:0)
您需要使用AND代替OR:
if ( ($uploadfile_type !='image/gif') && ($uploadfile_type !='image/jpeg')
&& ($uploadfile_type !='image/png'))
OR将始终失败,因为文件只能是单一类型。
答案 4 :(得分:0)
乍得的答案是对的。
如果您想缩短代码并使其更漂亮:
if (!in_array($uploadfile_type, array('image/gif', 'image/jpeg', 'image/png'))
{
// bad
}