我有一个用于将数据上传到我的数据库的表单。表单有许多输入字段,包括文本,数字,文本区域和文件(图像)。
提交表单时,我会检查是否有上传的图像,如果是,请检查上传的图像是否通过了一系列检查(低于最大文件大小,正确的扩展名等),整个过程都在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()之后我的代码工作正常,但我想知道这是否是正确的继续进行方式,或者是否还有其他更好的选择。
我期待任何意见和/或建议。
答案 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。