我向php脚本发布了一个图像url。在这个php脚本中,我得到了图像url,并检查扩展是什么,以及这个扩展是否与几个扩展匹配:
$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语句中提到的不相等。
我不知道我做错了什么?
您希望在此逻辑中使用and
,而不是or
。
if($ext != 'jpg' && $ext != 'jpeg' && $ext != 'png' && $ext != 'gif')
目前,您的if
语句显示"如果扩展名不是jpg、不是png或不是gif",即使允许扩展名(即"jpg"),它也将始终匹配,因为"jpg!="png"。
您想要and
,因为它会使if
语句变为"如果扩展名不是jpg、不是png、也不是gif",那么它是无效的。
您也可以进行
if(in_array($ext,array('gif','jpg','jpeg','png')){
//good
}else{
//bad
}
尝试切换逻辑:
if($ext == 'jpg' || $ext == 'jpeg' || $ext == 'png' || $ext == 'gif') {
echo "a correct extension";
}else{
echo $ext; echo "wrong";
}
使用OR,如果满足任何条件,就会触发该条件,并且由于.jpg扩展名与.png扩展名不匹配,它将向您提供Wrong
消息。
您的代码几乎是正确的,但您必须使用正确的运算符,在本例中为&&
。
请尝试这个:
$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中逻辑运算符的内容。