PHP在上传函数未免会使用到一系列的条件语句,来判断检测上传的文件,所以每次上传的时候,单独处理的话,会比较繁琐散乱,所以通常情况下需要封装成函数进行调用:
调用方法:uploadFile( $_FILES['myFile'] );
函数实现逻辑:
(1)添加默认的文件类型数组 $allowEx
(2)添加可上传文件最大字节数的限制 $maxsize
(3)获取文件扩展名
(4)获取随机不重复文件名(包括路径)
(5)判断DOWN文件夹是否存在,不存在就生成该文件夹
(6)判断错误信息
(7)判断是否为非法文件类型 in_array()
(8)判断文件的字节大小,是否超过限制的大小
(9)判断是否为一个合法的文件 getimagesize
(10)判断是否是以POST上传的文件 is_uploaded_file( $fileInfo['tmp_name'] )
(11)在指定目录下生成该上传的文件 move_uploaded_file( $fileInfo['tmp_name'] , $path )
function uploadFiles($fileInfo, $allowExt = array('gif', 'jpg', 'jpeg', 'png', 'wbmp'), $maxsize = 1048570006, $imgFlag = true) { $mes = ''; //判断文件是否是通过HTTP_POST上传上来的 $ext = getExt($fileInfo['name']); //获取扩展名 $filename = getUniName() . '.' . $ext; //获取随机文件名 $path = 'uploads'; //生成文件夹 if (!file_exists($path)) { mkdir($path, 0777, true); } $destination = $path . '/' . $filename; //生成文件路径 //判断上传错误信息 if ($fileInfo['error'] == UPLOAD_ERR_OK) { //判断是否为图片(非法文件类型) if (!in_array($ext, $allowExt)) { exit('该文件不是图片 : 非法文件类型'); } if ($fileInfo['size'] > $maxsize) { exit('文件过大'); } if ($imgFlag) { //如何验证图片是否是一个真正的图片类型 if (!getimagesize($fileInfo['tmp_name'])) { exit('不是合法文件'); } } //在指定文件夹下生成文件 if (!is_uploaded_file($fileInfo['tmp_name'])) { exit('文件不是通过HTTP_POST文件上传的'); } else { if (move_uploaded_file($fileInfo['tmp_name'], $destination)) { exit('文件上传成功'); } else { exit('文件上传失败'); } } } switch ($fileInfo['error']) { case UPLOAD_ERR_INI_SIZE: $mes = '上传文件大小超过服务器允许上传的最大值'; break; case UPLOAD_ERR_NO_TMP_DIR: $mes = '没有找不到临时文件夹'; break; case UPLOAD_ERR_CANT_WRITE: $mes = '文件不可写'; break; case UPLOAD_ERR_FORM_SIZE: $mes = '上传文件大小超过隐藏表单设置允许上传的最大值MAX_FILE_SIZE'; break; case UPLOAD_ERR_EXTENSION: $mes = '文件上传扩展没有打开'; break; case UPLOAD_ERR_PARTIAL: $mes = '文件只有部分被上传'; break; } return $mes; }