文件类型PHP验证

时间:2011-08-01 07:54:22

标签: php validation file-upload

我做错了代码,它总是显示'文件类型.doc,.docx,.odt和最大文件大小2mb支持',即使文件类型为.doc格式且大小为0kb。

if(($_FILES["file"]["type"] != 'application/octet-stream') ||
            ($_FILES["file"]["type"] != 'application/vnd.oasis.opendocument.text')||
            ($_FILES["file"]["type"] != 'application/msword')||
            ($_FILES["file"]["size"] > 200000))
        {
            //echo $_FILES["file"]["size"];
            //echo $_FILES["file"]["type"];
            $this->assign_values('msg',"File types .doc,.docx,.odt and max file size 2mb supported");
            //echo "Error: " . $_FILES["file"]["error"] . "<br />";
        }

3 个答案:

答案 0 :(得分:4)

您需要在文件类型之间将||更改为&&。 或者甚至更好地根据允许的类型列表检查类型:

$allowedTypes = array('application/octet-stream', 'application/vnd.oasis.opendocument.text', 'application/msword');

if(!in_array($_FILES["file"]["type"], $allowedTypes) || $_FILES["file"]["size"] > 200000)
        {
            //echo $_FILES["file"]["size"];
            //echo $_FILES["file"]["type"];
            $this->assign_values('msg',"File types .doc,.docx,.odt and max file size 2mb supported");
            //echo "Error: " . $_FILES["file"]["error"] . "<br />";
        }

答案 1 :(得分:0)

您正在使用OR,这意味着您提供的参数之一必须为真。

由于您在不同的值上检查类型3次,因此它必然始终返回true,从而触发if。

答案 2 :(得分:0)

您正在使用OR(||),如果任何一个语句为真,则代码将执行