我的If语句检查上传文件有什么问题? (PHP)

时间:2010-04-05 17:08:29

标签: php

我正在尝试测试上传的文件是否是我想要的图像类型。如果它不是gif,jpeg,png,它应该回应“问题”。但是当我执行这段代码时,它总是说有一个问题。我的if语句出了什么问题?

$uploadfile_type=$_FILES['userfile']['type'];

    if ( ($uploadfile_type !='image/gif') || ($uploadfile_type !='image/jpeg') 
    || ($uploadfile_type !='image/png'))  
    {
        echo 'Problem: file is not a gif or jpeg or png!';
        exit;
    }

当我只检查一种类型的图像时,此代码有效。例如:if($ uploadfile_type!='image / gif') - >这个陈述会起作用,但是当我添加OR时它不会。

5 个答案:

答案 0 :(得分:5)

当您使用AND(||)时,您正在使用OR(&&)。如果它不是GIF 并且它不是JPG 它不是PNG,你想说有问题。使用OR,它不会说有问题的唯一方法是,如果你有某种类型的文件同时成为所有3种类型。

答案 1 :(得分:2)

有一个谜语:

  我的口袋里有两枚硬币。其   总价值是三十美分。之一   它们不是镍。它们是什么?

答案是它们是四分之一和镍 - 本季度满足“其中一个不是镍”的条件。这是你面临的一个问题。 每个文件都是not a gifnot a jpeg - 甚至是gif和jpeg。 GIF是not jpegs,jpeg是not gifs。因此,正如其他人所说,您需要使用AND而不是OR

答案 2 :(得分:1)

您应该定义已接受的mimetypes列表:

$accepted_types = array(
    'image/gif',
    'image/jpeg',
    'image/png',
);

$uploadfile_type=$_FILES['userfile']['type'];

if (!in_array($uploadfile_type, $accepted_types))
{
    echo 'Problem: file is not a gif or jpeg or png!';
    exit;
}

我希望这会有所帮助, 杰罗姆瓦格纳

答案 3 :(得分:0)

您需要使用AND代替OR:

if ( ($uploadfile_type !='image/gif') && ($uploadfile_type !='image/jpeg')
  && ($uploadfile_type !='image/png'))  

OR将始终失败,因为文件只能是单一类型。

答案 4 :(得分:0)

乍得的答案是对的。

如果您想缩短代码并使其更漂亮:

if (!in_array($uploadfile_type, array('image/gif', 'image/jpeg', 'image/png'))
{
  // bad
}