我有一个表格,用于将数据上传到我的数据库 . 表单有许多输入字段,范围包括文本,数字,文本区域和文件(图像) .
提交表单时,我检查是否有上传的图像,如果是,请检查上传的图像是否通过一系列检查(低于最大文件大小,正确的扩展名等),整个过程在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 回答
我会使用
$_FILES
给出的error-code:甚至还有其他可以检查的错误代码,例如,如果文件是大的等等 .
这将为文件提供临时名称或null .