在上传文件的时候通常会用到单文件上传,也会用到多文件上传,比如在上传缩略图的时候等等,那在进行这些操作时候,必将需要把这些操作封装成函数,方便开发。但是在有些上传情况比较复杂的情况,不明确单文件上传还是多文件上传的时候,就需要封装一个多文件单文件上传的统一函数:
在这个函数中用到了,之前的buildInfo()方法 , 这个方法主要是来格式化规整杂乱上传文件信息:
封装函数名:uploadFile()
function uploadFile($path = 'uploads', $allowExt = array('gif', 'jpg', 'jpeg', 'png', 'wbmp', 'txt'), $maxsize = 1048570006, $imgFlag = true) { $i = 0; $uploadedFiles = array(); //生成文件夹 if (!file_exists($path)) { mkdir($path, 0777, true); } $files = buildInfo($_FILES); foreach ($files as $fileInfo) { //判断上传错误信息 if ($fileInfo['error'] == UPLOAD_ERR_OK) { $ext = getExt($fileInfo['name']); //获取扩展名 $filename = getUniName() . '.' . $ext; //获取随机文件名 $destination = $path . '/' . $filename; //生成文件路径 //判断是否为图片(非法文件类型) 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 { //判断文件是否是通过HTTP_POST上传上来的 if (move_uploaded_file($fileInfo['tmp_name'], $destination)) { $fileInfo['name'] = $filename; unset($fileInfo['tmp_name'], $fileInfo['error']); $uploadedFiles[$i] = $fileInfo; $i++; $mes = '文件上传成功'; } else { $mes = '文件上传失败'; } } } else { 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 $uploadedFiles; }
在这个函数中用到了,之前的buildInfo()方法 , 这个方法主要是来格式化规整杂乱上传文件信息:
function buildInfo($files) { $arr_item = array(); $arr_All = array(); $num = 0; foreach ($files as $my_file) { //单文件 ( 多文件则对应数组类型 ) if (is_string($my_file['name'])) { $arr_All[$num] = $my_file; $num++; } else { for ($j = 0; $j < count($my_file['name']); $j++) { $arr_item = []; foreach ($my_file as $key => $my_item) { $arr_item[$key] = $my_item[$j]; } $arr_All[$num++] = $arr_item; } } } return $arr_All; }
在进行调用时 : $info = uploadFile(); print_r($info);
打印结果: