查看: 1519|回复: 0

[PHP学习] PHP实现上传多文件示例代码

发表于 2017-12-13 08:00:02

上传多文件

1.在对多文件信息进行操作前,需要构建文件信息,通过buildInfo函数将三维数组转换成便于文件操作的二维数组。

  1. function buildInfo(){
  2. $i = 0;
  3. foreach ($_FILES as $v){
  4. //判断是否是单文件
  5. if(is_string($v['name'])){
  6. $files[$i] = $v;
  7. $i++;
  8. }else{
  9. //多文件
  10. foreach ($v['name'] as $key => $value){
  11. $files[$i]['name'] = $value;
  12. $files[$i]['size'] = $v['size'][$key];
  13. $files[$i]['tmp_name'] = $v['tmp_name'][$key];
  14. $files[$i]['type'] = $v['type'][$key];
  15. $files[$i]['error'] = $v['error'][$key];
  16. $i++;
  17. }
  18. }
  19. }
  20. return $files;
  21. }
复制代码

单文件和多文件的判断在于文件数组的类型,单文件(二维数组)、多文件(三维数组)。

2.文件上传函数及参数

代码如下:
function uploadFiles($path = "uploads", $allowExt = array("jpg", "gif", "png", "wbmp"), $maxSize = 1048576, $imgFlag = true)

path,保存目录。allowExt,允许扩展名数组。maxSize最大上传文件大小。imgFlag,图片文件标识符。

3.判断保存文件的目录是否存在

  1. if(!file_exists($path)){
  2. mkdir($path, 0777, true);
  3. }
复制代码

4.传入构建好的文件信息,保存到files

  1. $i = 0;
  2. $files = buildInfo();
复制代码

5.判断文件的error类型

  1. foreach ($files as $file){
  2. if($file['error'] == UPLOAD_ERR_OK){
  3. }else{
  4. switch ($file['error']){
  5. case 1:
  6. $mes = "超过配置文件上传文件大小";
  7. break;
  8. case 2:
  9. $mes = "超过了表单设置";
  10. break;
  11. case 3:
  12. $mes = "文件部分被上传";
  13. break;
  14. case 4:
  15. $mes = "没有文件上传";
  16. break;
  17. case 6:
  18. $mes = "没找到临时目录";
  19. break;
  20. case 7:
  21. $mes = "文件不可写";
  22. break;
  23. case 8:
  24. $mes = "由于PHP的扩展程序中断了文件上传";
  25. break;
  26. }
复制代码

6.限制文件类型

  1. if($file['error'] == UPLOAD_ERR_OK){
  2. $ext = getExt($file['name']);
  3. if(!in_array($ext, $allowExt)){
  4. exit("非法文件类型");
  5. }
复制代码

7.限制是否为真的图片类型

  1. if($imgFlag){
  2. if(!getimagesize($file['tmp_name'])){
  3. exit("不是真的图片类型");
  4. }
  5. }
复制代码

8.判断文件大小

  1. if($file['size'] > $maxSize){
  2. exit("文件过大");
  3. }
复制代码

9.判断文件是否通过post上传

  1. if(!is_uploaded_file($file[‘tmp_name'])){
  2. exit(“文件不是通过HTTP POST上传”);
  3. }
复制代码

10.重命名文件(唯一且不重复)并保存到目标目录

  1. $filename = getUniName().".".$ext;
  2. $destination = $path."/".$filename;
  3. if(move_uploaded_file($file['tmp_name'], $destination)){
  4. $mes = "文件上传成功";
  5. $file['name'] = $filename;
  6. unset($file['error'], $file['tmp_name']);
  7. $uploadedFiles[$i] = $file;
  8. $i++;
  9. }
复制代码

重写文件信息数组中的name,删除变量file[‘error']和file[‘tmp_name']。最后将成功上传的文件保存到uploadedFiles数组中。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持程序员之家。



回复

使用道具 举报