PHP实现单文件上传、多个单文件上传、多文件上传的过程化封装

  1. upload.html
  2. //要在选择上传文件时能一次选择多个文件,那么就加multiple="multiple" ,还有注意下name="myFile1"和name="myFile[]"的区别,单文件、多文件上传.  
  3.   
  4. <!doctype html>  
  5. <html>  
  6. <head>  
  7. <meta charset="utf-8">  
  8. <title>无标题文档</title>  
  9. </head>  
  10.   
  11. <body>  
  12. <form action="upload.php" method="post" enctype="multipart/form-data">  
  13.     <input type="file" name="myFile1" /><br/>  
  14.     <input type="file" name="myFile2" /><br/>  
  15.     <input type="file" name="myFile[]" /><br/>  
  16.     <input type="file" name="myFile[]" /><br/>  
  17.     <input type="file" name="myFile[]" multiple="multiple"/><br/>  
  18.     <input type="submit" value="上传文件"/>  
  19. </form>  
  20. </body>  

  1. </html>  
  2. 文件上传处理 upload.php

    [php]  view plain  copy
      在CODE上查看代码片 派生到我的代码片
    1. <?php  
    2. /** 
    3.  * Created by PhpStorm. 
    4.  * User: DreamBoy 
    5.  * Date: 2016/4/8 
    6.  * Time: 21:39 
    7.  */  
    8. header('content-type:text/html;charset=utf-8');  
    9. include_once 'upload.function.php';  
    10.   
    11. $files = getFiles();  
    12. //print_r($files);  
    13.   
    14. foreach($files as $fileInfo) {  
    15.     $res = uploadFile($fileInfo);  
    16.     echo $res['mes'],'<br/>';  
    17.   
    18.     if(isset($res['dest'])) {  
    19.         $uploadFiles[] = $res['dest'];  
    20.     }  
    21. }  
    22. //过滤掉上传失败的文件  
    23. /** 
    24.  * array_values() 函数返回一个包含给定数组中所有键值的数组,但不保留键名。 
    25.  * 提示:被返回的数组将使用数值键,从 0 开始并以 1 递增。 
    26.  */  
    27. /** 
    28.  * array_filter() 函数用回调函数过滤数组中的值。 
    29.  * 该函数把输入数组中的每个键值传给回调函数。如果回调函数返回 true, 
    30.  * 则把输入数组中的当前键值返回结果数组中。数组键名保持不变。 
    31.  */  
    32. //这里使用array_filter过滤掉数组中的空内容  
    33. if(isset($uploadFiles)) {  
    34.     $uploadFiles=array_filter($uploadFiles);  
    35.   
    36.     print_r($uploadFiles);  
    37. }  
    38. 实现文件上传的函数 upload.function.php

      [php]  view plain  copy
        在CODE上查看代码片 派生到我的代码片
      1. <?php  
      2. /** 
      3.  * Created by PhpStorm. 
      4.  * User: DreamBoy 
      5.  * Date: 2016/4/8 
      6.  * Time: 21:41 
      7.  */  
      8. /** 
      9.  * 构建上传文件信息 
      10.  * @return mixed 
      11.  */  
      12. function getFiles() {  
      13.     $i = 0;  
      14.     foreach($_FILES as $file) {  
      15.         //单文件或者多个单文件上传  
      16.         if(is_string($file['name'])) {  
      17.             $files[$i] = $file;  
      18.             $i++;  
      19.         } //多文件上传  
      20.         elseif(is_array($file['name'])) {  
      21.             foreach($file['name'as $key=>$val) {  
      22.                 $files[$i]['name'] = $file['name'][$key];  
      23.                 $files[$i]['type'] = $file['type'][$key];  
      24.                 $files[$i]['tmp_name'] = $file['tmp_name'][$key];  
      25.                 $files[$i]['error'] = $file['error'][$key];  
      26.                 $files[$i]['size'] = $file['size'][$key];  
      27.                 $i++;  
      28.             }  
      29.         }  
      30.     }  
      31.     return $files;  
      32. }  
      33.   
      34. /** 
      35.  * 获取文件扩展名 
      36.  */  
      37. function getExt($filename) {  
      38.     return strtolower(pathinfo($filename,PATHINFO_EXTENSION));  
      39. }  
      40.   
      41. /** 
      42.  * 获取唯一字符串 
      43.  */  
      44. function getUniName() {  
      45.     return md5(uniqid(microtime(true), true));  
      46. }  
      47.   
      48. /** 
      49.  * 针对于单文件、多个单文件、多文件的上传 
      50.  * @param array $fileInfo 
      51.  * @param string $path 
      52.  * @param bool $flag 
      53.  * @param int $maxSize 
      54.  * @param array $allowExt 
      55.  * @return array 
      56.  */  
      57. function uploadFile($fileInfo$path='./uploads',$flag=true,$maxSize=1048576,$allowExt = array('jpeg','jpg','gif','png')) {  
      58.     //$allowExt = array('jpeg','jpg','gif','png');  
      59.     //$flag = true;  
      60.     //$maxSize = 1048576; //1M  
      61.   
      62.     $res = array();  
      63.   
      64.     //判断错误号  
      65.     if($fileInfo['error'] == UPLOAD_ERR_OK) {  
      66.         //检测上传文件的大小  
      67.         if($fileInfo['size'] > $maxSize) {  
      68.             $res['mes'] = $fileInfo['name'] . '上传文件过大';  
      69.         }  
      70.   
      71.         $ext = getExt($fileInfo['name']);  
      72.         //检测上传文件的文件类型  
      73.         if(!in_array($ext$allowExt)) {  
      74.             $res['mes'] = $fileInfo['name'] . '非法文件类型';  
      75.         }  
      76.   
      77.         //检测是否是真是的图片类型  
      78.         if($flag) {  
      79.             if(!getimagesize($fileInfo['tmp_name'])) {  
      80.                 $res['mes'] = $fileInfo['name'] . '不是真实图片类型';  
      81.             }  
      82.         }  
      83.   
      84.         //检测文件是否是通过HTTP POST上传上来的  
      85.         if(!is_uploaded_file($fileInfo['tmp_name'])) {  
      86.             $res['mes'] = $fileInfo['name'] . '文件不是通过HTTP POST方式上传上来的';  
      87.         }  
      88.   
      89.         if($resreturn $res;  
      90.   
      91.         //$path = './uploads';  
      92.         if(!file_exists($path)) {  
      93.             mkdir($path, 0777, true);  
      94.             chmod($path, 0777);  
      95.         }  
      96.         $uniName = getUniName();  
      97.         $destination = $path . '/' . $uniName . '.' . $ext;  
      98.         if(!move_uploaded_file($fileInfo['tmp_name'],$destination)) {  
      99.             $res['mes'] = $fileInfo['name'] . '文件移动失败';  
      100.         }  
      101.   
      102.         $res['mes'] = $fileInfo['name'] . '上传成功';  
      103.         $res['dest'] = $destination;  
      104.   
      105.         return $res;  
      106.     } else {  
      107.         //匹配错误信息  
      108.         switch($fileInfo['error']) {  
      109.             case 1:  
      110.                 $res['mes'] = '上传文件超过了PHP配置文件中upload_max_filesize选项的值';  
      111.                 break;  
      112.             case 2:  
      113.                 $res['mes'] = '超过了表单MAX_FILE_SIZE限制的大小';  
      114.                 break;  
      115.             case 3:  
      116.                 $res['mes'] = '文件部分被上传';  
      117.                 break;  
      118.             case 4:  
      119.                 $res['mes'] = '没有选择上传文件';  
      120.                 break;  
      121.             case 6:  
      122.                 $res['mes'] = '没有找到临时目录';  
      123.                 break;  
      124.             case 7:
      125.                $res['mes'] = '文件写入失败'
      126.                break;
      127.             case 8:  
      128.                 $res['mes'] = '系统错误';  
      129.                 break;  
      130.         }  
      131.         return $res;  
      132.     }  
      133. }  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值