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のようなURLを投稿し、彼が拡張子(この場合は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」。

「拡張子がjpgでもpngでもgifでもない場合」andというステートメントが表示されるため、これは無効です。if

于 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";
   }

一連の否定的なステートメントを使用する場合は、常に演算子を使用する必要があります&&

やりたいことをする方法はたくさんありますが、コードをそのままにしておきたい場合は、に変更||するだけ&&で大​​丈夫です。

PHPの論理演算子の詳細をお読みください。

于 2012-08-22T17:48:46.440 に答える