当前位置 : 主页 > 编程语言 > 其它开发 >

文件上传的实例

来源:互联网 收集:自由互联 发布时间:2021-08-24
前端 !DOCTYPE html html lang="en" head meta charset="UTF-8" meta http-equiv="X-UA-Compatible" content="IE=edge" meta name="viewport" content="width=device-width, initial-scale=1.0" titleDocument/title /head body form action="userUpload.ph

前端


  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <form action="userUpload.php" method="post" enctype="multipart/form-data">
  11. 单文件上传<input type="file" name="pic" id="">
  12. <input type="submit" value="上传">
  13. </form>
  14.  
  15.  
  16. <form action="userUpload.php" method="post" enctype="multipart/form-data">
  17. 多文件上传<input type="file" name="pic[]" multiple id="">
  18. <input type="submit" value="上传">
  19. </form>
  20. </body>
  21. </html>

  1. <?php
  2. // 文件上传类
  3. /**
  4. * 1 判断上传过程中是否有错误
  5. * 2 验证上传文件的类型是否符合要求
  6. * 3 验证上传文件的大小是否符合要求
  7. * 4 判断上传路径和上传成功后要保存的文件名新名称
  8. * 5 将图片从垃圾目录中移除
  9. * 注意:
  10. * 如果是单文件上传$_FILES['表单名称']则是一个一维数组
  11. * 如果是多文件上传$_FILES['表单名称']则是一个二维数组,数组中name对应着每个上传文件的名称
  12. */
  13.  
  14. class Upload{
  15. //成员属性
  16. //将是检测上传过程的数组变量
  17. public $file;
  18. public $pic;
  19. public $path;
  20. public $size;
  21. public $type;
  22. public $newImg;
  23. public $pathInfo = array();
  24. //成员方法
  25. //构造方法 初始化成员属性值
  26. function __construct($pic,$path='./upload',$size = 5000000,array $type = array('image/jpeg','image/jpg','image/gif','image/png')){
  27. //初始化赋值
  28. $this->pic = $pic;
  29. $this->file= $_FILES[$pic];
  30. $this->path= $path;
  31. $this->size =$size;
  32. $this->type = $type;
  33. }
  34.  
  35. //需要一个方法可以在外部调用进行上传文件操作
  36. public function do_upload($mutiple = false){
  37. if($mutiple === false){
  38. //用户使用单文件上传方式
  39. return $this->myExec();
  40. }else{
  41. $return = [];
  42. //用户使用多文件上传方式
  43. foreach($_FILES[$this->pic]['name'] as $k=>$v){
  44. $this->file['name'] = $v;
  45. $this->file['type'] = $_FILES[$this->pic]['type'][$k];
  46. $this->file['error'] = $_FILES[$this->pic]['error'][$k];
  47. $this->file['tmp_name'] = $_FILES[$this->pic]['tmp_name'][$k];
  48. $this->file['size'] = $_FILES[$this->pic]['size'][$k];
  49. $return[]= $this->myExec();
  50. }
  51. return $return;
  52.  
  53. }
  54. }
  55. //6 制作一个方法将文件上传的过程调用执行
  56. private function myExec(){
  57. //需要将文件上传的5步都执行一次判断是否成功
  58. if($this->fileError() !==true){
  59. return $this->fileError();
  60. }elseif($this->patternType() !== true){
  61. return $this->patterType();
  62. }elseif($this->patternSize() !== true){
  63. return $this->patternSize();
  64. }elseif($this->reNameImage() !== true){
  65. return $this->reNameImage();
  66. }elseif($this->moveImg() !== true){
  67. return $this->moveImg();
  68. }else{
  69. return $this->moveImg();
  70. }
  71.  
  72. }
  73. // 1 判断上传过程中是否有错误
  74. private function fileError(){
  75. //错误判断
  76. if($this->file['error']){
  77. switch($this->file['error']>0){
  78. case 1:
  79. return '超出PHP.INI 配置文件中的upload_max_filesize设置的值';
  80. case 2:
  81. return '超过了HTML表单中设置的max_file_size的值';
  82. case 3:
  83. return '只有部分文件被上传';
  84. case 4:
  85. return '没有文件上传';
  86. case 6:
  87. return '找不到临时目录';
  88. case 7:
  89. return '写入失败';
  90.  
  91. }
  92. }
  93. return true;
  94. }
  95. //2 验证上传文件的类型是否符合要求
  96. private function patternType(){
  97. if(!in_array($this->file['type'],$this->type)){
  98. return '类型不合法';
  99. }
  100. return true;
  101. }
  102. // 3 验证上传文件的大小是否符合要求
  103. private function patternSize(){
  104. if($this->file['size']>$this->size){
  105. return '上传文件大小超过了预设的'.$this->size.'byte大小';
  106. }
  107. return true;
  108. }
  109. // 4 判断上传路径和上传成功后要保存的文件名新名称
  110. private function reNameImage(){
  111. //创建保存目录,可能会遇到upload/pic/nihao/
  112. if(!file_exists($this->path)){
  113. mkdir($this->path,0777,true);
  114. }
  115. //获取图片后缀名
  116. $suffix = strrchr($this->file['name'],'.');
  117. //判断名称是否重复
  118. do{
  119. //制作新名称
  120. $this->newImg = md5(time().mt_rand(1,1000).uniqid()).$suffix;
  121. }while(file_exists($this->path.$this->newImg));
  122. return true;
  123. }
  124.  
  125. // 5 将图片从垃圾目录中移除
  126. private function moveImg(){
  127. if(move_uploaded_file($this->file['tmp_name'],$this->path.$this->newImg)){
  128. $this->pathInfo['pathInfo']= $this->path.$this->newImg;
  129. $this->pathInfo['name']= $this->newImg;
  130. $this->pathInfo['path'] = $this->path;
  131. return $this->pathInfo;
  132. }else{
  133. return '未知错误,请重新上传';
  134. }
  135. }
  136. }
  137. ?>

  1. <?php
  2. //包含上传类,创建上传文件对象
  3. echo '<pre>';
  4. var_dump($_FILES);
  5. include './upload.php';
  6. $upload = new Upload('pic');
  7. $res=$upload->do_upload(true);
  8. var_dump($res);
上一篇:php 重载与事件委托
下一篇:没有了
网友评论