1

我将图像 url 发布到 php 脚本。在这个 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 语句中提到的一个。

我不知道我做错了什么?

4

4 回答 4

2

你想and在这个逻辑中使用,而不是or.

if($ext != 'jpg' && $ext != 'jpeg' && $ext != 'png' && $ext != 'gif')

目前,您的if声明为“如果扩展名不是 jpg 或不是 png 或不是 gif”,即使允许扩展名(即“jpg”),它也将始终匹配,因为“jpg”!=“ .png”。

您想要and,因为它会使if声明显示为“如果扩展名不是 jpg 且不是 png 且不是 gif”,那么它是无效的。

于 2012-08-22T17:48:03.437 回答
2

你也可以做

if(in_array($ext,array('gif','jpg','jpeg','png')){
//good
}else{
//bad
}
于 2012-08-22T17:49:24.863 回答
1

尝试切换逻辑:

if($ext == 'jpg' || $ext == 'jpeg' || $ext == 'png' || $ext == 'gif') {
    echo "a correct extension";
}else{
    echo $ext; echo "wrong";        
}

使用 OR,如果满足任何条件,就会触发条件,并且由于 .jpg 扩展名与 .png 扩展名不匹配,它会给您Wrong消息。

于 2012-08-22T17:48:21.320 回答
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";
   }

当您使用一系列否定语句时,总是应该使用 operator &&

有很多方法可以做你想做的事,但如果你想保留你的代码,因为它只是改变||&&你会没事的。

请阅读有关PHP 中的逻辑运算符的更多信息。

于 2012-08-22T17:48:46.440 回答