图片url可以';我没听懂if语句


Image url can't get through if statement

我向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中逻辑运算符的内容。