2014-02-15 50 views
1

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

提交表单时,我检查是否有任何图像上传,如果是,请检查上传的图像是否通过了一系列检查(低于最大文件大小,正确的扩展名等),整个过程在如果任何检查失败,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,即使没有文件被uploaded.Upon一些谷歌上搜索,寻找对堆栈溢出,特别是isset and !empty not passing through a check for uploaded files,其中据说由于$ _FILES是一个超全球化的,isset将返回true,我环顾四周寻找解决方案,最终以代替isset()的方式解决file_exists()问题。

我使用file_exists()的基本原理是,上传(提交)的文件将在上传过程中存储在临时目录中,如果我检查此临时目录,我将能够确定是否文件真的上传了。

用file_exists替换isset()后,我的代码现在工作正常,但我想知道这是否是正确的方式继续,或者如果有任何其他更好的替代品。

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

回答

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

这会给文件临时名称或为空。

0

我会用error-code鉴于$_FILES

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

有,你可以核对甚至其他错误代码,例如,如果该文件是大等