使用file_exists检查上传的文件

时间:2014-02-15 11:10:53

标签: php file-upload

我有一个用于将数据上传到我的数据库的表单。表单有许多输入字段,包括文本,数字,文本区域和文件(图像)。

提交表单时,我会检查是否有上传的图像,如果是,请检查上传的图像是否通过了一系列检查(低于最大文件大小,正确的扩展名等),整个过程都在try / catch块设置为在任何检查失败时抛出异常。

我的支票如下:

$upload=$_FILES['Upload']['tmp_name'];
if(isset($upload))
{
    if(!empty($upload) && is_uploaded_file($upload))
    {
        //Checks file size,extension and uploads the file
    }
    else
    {
        //throw new Exception
    }
}
else
{
    //throw new Exception
}

然而,当使用上述内容时,即使没有上传文件,isset也会返回true。使用google搜索并查看堆栈溢出,特别是isset and !empty not passing through a check for uploaded files,其中声明isset将返回true,因为$ _FILES是一个超全局,我四处寻找解决方案并最终在file_exists()上定义为我代码中isset()的替代。

我使用file_exists()的理由是上传(提交)的文件将在上传过程中存储在临时目录中,如果我检查这个临时目录,我就能确定文件是否正确真的上传了。

用file_exists替换isset()之后我的代码工作正常,但我想知道这是否是正确的继续进行方式,或者是否还有其他更好的选择。

我期待任何意见和/或建议。

2 个答案:

答案 0 :(得分:0)

我会使用$_FILES给出的error-code

if($_FILES['Upload']['error'] == UPLOAD_ERR_OK) {
    //seems to have worked
}

甚至可以检查其他错误代码,例如,如果文件是大等等。

答案 1 :(得分:0)

$upload=$_FILES['Upload']['tmp_name'];
if($upload)
{}

这将为文件提供临时名称或null。