我将图片网址发布到php脚本。在这个PHP脚本中,我得到图像网址,并检查扩展名是什么,以及此扩展名是否与几个扩展名匹配:
$ext1 = pathinfo($_POST['form_pic'], PATHINFO_EXTENSION);
$ext = strtolower($ext1);
if($ext != 'jpg' || $ext != 'jpeg' || $ext != 'png' || $ext != 'gif') {
echo $ext; echo "wrong";
}else{
echo "a correct extension";
}
但是,即使我发布了一个类似于http://www.test.com/picture.jpg的网址并且他获得了扩展名,在这种情况下jpg,他仍然会通过if语句,说扩展名不等于if中提到的扩展名。言。
我不知道我做错了什么?
答案 0 :(得分:2)
您希望在此逻辑中使用and
,而不是or
。
if($ext != 'jpg' && $ext != 'jpeg' && $ext != 'png' && $ext != 'gif')
目前,您的if
语句显示“如果扩展名不是jpg或不是png或不是gif”,它将始终匹配,即使允许扩展名(即“jpg”) ,因为“jpg”!=“png”。
你想要and
,因为它会使if
语句为“如果扩展名不是jpg且不是png且不是gif”,则它无效。
答案 1 :(得分:2)
您也可以
if(in_array($ext,array('gif','jpg','jpeg','png')){
//good
}else{
//bad
}
答案 2 :(得分:1)
尝试切换逻辑:
if($ext == 'jpg' || $ext == 'jpeg' || $ext == 'png' || $ext == 'gif') {
echo "a correct extension";
}else{
echo $ext; echo "wrong";
}
使用OR,如果满足任何条件,将触发条件,并且由于.jpg扩展名与.png扩展名不匹配,因此它会为您提供Wrong
消息。
答案 3 :(得分:0)
您的代码几乎是正确的,但在这种情况下您必须使用正确的运算符&&
。
请试试这个:
$ext1 = pathinfo($_POST['form_pic'], PATHINFO_EXTENSION);
$ext = strtolower($ext1);
if($ext != 'jpg' && $ext != 'jpeg' && $ext != 'png' && $ext != 'gif') {
echo $ext; echo "wrong";
} else {
echo "A correct extension";
}
当您使用一系列否定陈述时,总是应该使用运算符&&
。
有很多方法可以做你想要的,但如果你想保留你的代码,只需将||
更改为&&
,你就可以了。
请在PHP中阅读有关Logical Operators的更多信息。