文件上传中的PHP错误处理

时间:2012-06-12 01:45:41

标签: php file-upload if-statement error-handling

我想在上传的图片大小超过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.");
}

3 个答案:

答案 0 :(得分:0)

好吧,如果您在没有上传文件的情况下考虑您的情况,您会看到它会失败,因为您的类型检查都不会返回true,因此它会在最终的其他位置之后落在错误行上。

你需要这样的东西:

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.");
    }
}

答案 1 :(得分:0)

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

来做到这一点
error_reporting(E_ALL);
ini_set("display_errors", 1);

如果您不确定错误来自哪里,您可以随时尝试print_r($_FILES);,并按照上面的逻辑进行操作。查看$_FILES['file']['error']变量file upload errors。如果上传成功,则其值为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"]
    );
}

答案 2 :(得分:0)

问题是

upload_max_filesize = 3M 

在我的php.ini文件中。 当我把它改成

upload_max_filesize = 4M 

一切都运转良好。

感谢。