图片网址无法通过if语句

时间:2012-08-22 17:46:37

标签: php pathinfo

我将图片网址发布到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中提到的扩展名。言。

我不知道我做错了什么?

4 个答案:

答案 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的更多信息。