0

当上传的图像大小超过 3MB 时,我想发出错误消息。这是我当前的代码。当图像超过 3MB 时,它会正确显示错误消息,但在没有上传图像时也会发出错误消息。我该如何解决?

//image check start
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 3072000))
//image check end
{
    if($_FILES['file']['size'] > 0)
    {
        file uploading script
    } else {
        do nothing
    }
} else {
    error("Maximum image size exceeded or invalid file format.");
}
4

3 回答 3

1

好吧,如果您在没有文件上传的情况下考虑您的情况,您会发现它会失败,因为您的类型检查都不会返回 true,因此它会在最后的 else 之后出现在错误行上。

你需要这样的东西:

if ( $_FILES['file']['size'] == 0 ) 
{
    // do nothing
} else {
    //image check start
    if ((($_FILES["file"]["type"] == "image/gif")
    || ($_FILES["file"]["type"] == "image/jpeg")
    || ($_FILES["file"]["type"] == "image/png")
    || ($_FILES["file"]["type"] == "image/pjpeg"))
    && ($_FILES["file"]["size"] < 3072000))
    //image check end
    {
        file uploading script
    } else {
        error("Maximum image size exceeded or invalid file format.");
    }
}

显然,如果您真的不需要在没有上传文件的情况下执行任何操作,则可以:

if ( $_FILES['file']['size'] != 0 ) 
{
    //image check start
    if ((($_FILES["file"]["type"] == "image/gif")
    || ($_FILES["file"]["type"] == "image/jpeg")
    || ($_FILES["file"]["type"] == "image/png")
    || ($_FILES["file"]["type"] == "image/pjpeg"))
    && ($_FILES["file"]["size"] < 3072000))
    //image check end
    {
        file uploading script
    } else {
        error("Maximum image size exceeded or invalid file format.");
    }
}
于 2012-06-12T01:58:57.087 回答
1

首先,您应该在调试时始终在脚本中启用错误报告。你可以这样做

error_reporting(E_ALL);
ini_set("display_errors", 1);

如果你不确定你的错误来自哪里,你总是可以尝试做print_r($_FILES);,然后按照上面的逻辑进行。检查文件上传错误$_FILES['file']['error']的变量。如果上传成功,它的值为.0

if ($_FILES["file"]["error"] !== 0) {
    if ($_FILES["file"]["size"]) > 0) {
        if ((($_FILES["file"]["type"] == "image/gif")
        || ($_FILES["file"]["type"] == "image/jpeg")
        || ($_FILES["file"]["type"] == "image/png")
        || ($_FILES["file"]["type"] == "image/pjpeg"))
        && ($_FILES["file"]["size"] < 3072000))
        //image check end
        {
            if($_FILES['file']['size'] > 0) {
                // file uploading script
            } 
            else {
                // do nothing
            }
        }
        else {
            error("Maximum image size exceeded or invalid file format.");
        }
    }
    else {
        error("Error uploading file. File has size of 0 bytes");
    }
}
else {
    error("There was an error uploading the file.
        File upload returned error code: " . $_FILES["file"]["error"]
    );
}
于 2012-06-12T02:04:54.940 回答
0

问题是

upload_max_filesize = 3M 

在我的 php.ini 文件中。当我将其更改为

upload_max_filesize = 4M 

一切正常。

谢谢。

于 2012-06-20T07:51:53.720 回答