我有一个验证功能,我在codeigniter中使用。
function valid_image() {
if ( ($_FILES["file"]["type"] != "image/jpeg") || ($_FILES["file"]["type"] != "image/gif") ) {
$this->form_validation->set_message('valid_image', 'Wrong file type..');
return false;
} else {
return true;
}
只有if语句中的“image / jpeg”部分才能正常工作。如果我尝试上传除jpg文件以外的任何内容,则会失败。如果我运行上面的代码,它会失败并同时使用jpg或gif文件。
在有人说“为什么不使用上传课程”之前,我不能。我将我的照片直接保存到MongoDB中,因此上传类没有多大帮助。
答案 0 :(得分:5)
如果文件是jpg,那么它不是gif,你得到的信息 如果文件是gif,那么它不是jpg,你仍然会收到消息。
你有“文件不是jpg或文件不是gif”。替换||与&&只有当“文件不是jpg并且文件不是gif”时才会收到消息。
答案 1 :(得分:1)
你的if语句错了。你应该使用'&&'而不是'||' (德莫根定律)。
答案 2 :(得分:1)
你需要你的条件
if ( ( $_FILES["file"]["type"] != "image/jpeg")
&& ($_FILES["file"]["type"] != "image/gif") ) {...}
如果它不是jpeg而且它不是gif - 它无效
答案 3 :(得分:1)
您需要AND代替OR
if (($_FILES["file"]["type"] != "image/jpeg") &&
($_FILES["file"]["type"] != "image/gif"))
答案 4 :(得分:1)
这并没有真正回答你的问题,但是......
$_FILE[blah]["type"]
参数由网络浏览器设置,因此是无法信任的用户数据。
您可能希望使用exif_imagetype($_FILES["file"]["tmp_name"])
来检测真实的图像类型。
function valid_image() {
$type = exif_imagetype($_FILES["file"]["tmp_name"]);
if (($type != IMAGETYPE_GIF) && ($type != IMAGETYPE_JPEG)) {
$this->form_validation->set_message('valid_image', 'Wrong file type..');
return false;
} else {
return true;
}
}
编辑:如果未安装exif扩展,您也可以这样做:
$sizes = getimagesize($_FILES["file"]["tmp_name"]);
$sizes[2]
将包含与IMAGETYPE constants之一相对应的值。
function valid_image() {
$sizes = getimagesize($_FILES["file"]["tmp_name"]);
if (($sizes[2] != IMAGETYPE_GIF) && ($sizes[2] != IMAGETYPE_JPEG)) {
$this->form_validation->set_message('valid_image', 'Wrong file type..');
return false;
} else {
return true;
}
}
答案 5 :(得分:1)
使用&&而不是||
答案 6 :(得分:0)
你拥有它的声明保证它不是jpeg而不是gif。问题是如果它是jpeg,它仍然不是gif,所以它返回false。实际上,它总是返回false,因为某些东西不能同时出现两件事。
更改||和&&如果这是你的意图,它应该有所帮助。
答案 7 :(得分:0)
你想要使用和,而不是或。在上面的代码中,jpg失败,因为它不是gif,并且gif失败,因为它不是jpg。
function valid_image() {
if ( ($_FILES["file"]["type"] != "image/jpeg") && ($_FILES["file"]["type"] != "image/gif") ) {
$this->form_validation->set_message('valid_image', 'Wrong file type..');
return false;
} else {
return true;
}
答案 8 :(得分:0)
如果您使用.gif尝试该语句,它会说它是错误的文件,因为它会先检查第一个'或'。此外,如果您尝试运行.jpg,它将通过第一个,但然后失败第二个,因此它仍然会说它无效。尝试制作'&&'而不是'||',这样它会检查并确保它每次都是其中之一。