zoukankan      html  css  js  c++  java
  • 文件上传与下载学习笔记(2)---多文件、单文件、多个单文件函数封装

    一:前导知识点:

    1:is_string()判断一个变量是否是字符串 is_array 判断一个变量是否是数组

    2:pathinfo()函数可以获取文件的扩展名。

    3:创建目录函数 mkdir()

    4: 生成唯一的随机数 uniqid()

    5:判断文件、目录是否存在file_exsits()

    二:思路与流程

    三:封装的函数代码

     1 <?php
     2 /**
     3  * 得到想要的文件类型
     4  * @return unknown
     5  */
     6 function getFiles() {
     7     $i = 0;
     8     foreach ( $_FILES as $file ) {
     9         // 判断是单文件
    10         if (is_string ( $file ['name'] )) {
    11             $files [$i] = $file;
    12             $i ++;
    13         // 判断是多文件
    14         } elseif (is_array ( $file ['name'] )) {
    15             foreach ( $file ['name'] as $k => $v ) {
    16                 $files [$k] ['name'] = $v;
    17                 $files [$k] ['type'] = $file ['type'] [$k];
    18                 $files [$k] ['tmp_name'] = $file ['tmp_name'] [$k];
    19                 $files [$k] ['error'] = $file ['error'] [$k];
    20                 $files [$k] ['size'] = $file ['size'] [$k];
    21             }
    22         }
    23     }
    24     return $files;
    25 }
    26 /**
    27  * 上传文件
    28  * @param unknown $fileInfo            
    29  * @return string
    30  */
    31 function uploadFiles($fileInfo, $path = "ttt",$allowExt = array ('jpg','jpeg','png','gif' ),$maxSize = 20000000,$flag = false) {
    32     //通过pathinfo得到文件扩展名
    33     $ext = pathinfo ( $fileInfo ['name'],PATHINFO_EXTENSION );
    34     //得到文件的唯一名称
    35     $uniName = md5 ( uniqid ( microtime ( true ), true ) ) . '.' . $ext;
    36     $destination = $path . '/' . $uniName;
    37     $res ['mes'] = null;
    38     //如果目录不存在,创建目录
    39     if (! file_exists ( $path )) {
    40         mkdir ( $path, 0777, true );
    41     }
    42     // 判断错误号
    43     if ($fileInfo ['error'] == 0) {
    44         // 判断文件大小
    45         if ($fileInfo ['size'] > $maxSize) {
    46             $res ['mes'] = $fileInfo['name']."上传文件过大";
    47         }
    48         // 判断文件类型
    49         if (! in_array ( $ext, $allowExt )) {
    50             $res ['mes'] =   $fileInfo['name']." 文件格式不正确";
    51         }
    52         // 判断是否是真的图片
    53         if ($flag) {
    54             if (! getimagesize ( $fileInfo ['tmp_name'] )) {
    55                 $res ['mes'] = $fileInfo['name']."不是真的图片";
    56             }
    57         }
    58         // 判断是否通过HTTP POST 方式上传
    59         if (! is_uploaded_file ( $fileInfo ['tmp_name'] )) {
    60             $res ['mes'] = $fileInfo['name']."文件上传途径不正确";
    61         }
    62         // 如果有值,就结束返回
    63         if ($res ['mes'])
    64             return $res;
    65             // 移动文件
    66         if (move_uploaded_file ( $fileInfo ['tmp_name'], $destination )) {
    67             $res ['mes'] = $fileInfo['name']."文件上传成功";
    68             $res ['dst'] = $destination;
    69         }
    70         return $res;
    71     } else {
    72         switch ($fileInfo['error']) {
    73             case 1 :
    74                 $res ['mes']= $fileInfo['name'].'上传文件超过了upload_max_filesize 选项的值';
    75                 break;
    76             case 2 :
    77                 $res ['mes']= $fileInfo['name'].'超过了表单MAX_FILE_SIZE限制的大小';
    78                 break;
    79             case 3 :
    80                 $res ['mes']= $fileInfo['name'].'文件上传不完整';
    81                 break;
    82             case 4 :
    83                 $res ['mes']= $fileInfo['name'].'没有选择上传文件';
    84                 break;
    85             case 6 :
    86                 $res ['mes']= $fileInfo['name'].'没有找到临时目录';
    87                 break;
    88             case 7 :
    89                 $res ['mes']= $fileInfo['name'].'文件写入失败';
    90                 break;
    91             case 8 :
    92                 $res ['mes']= $fileInfo['name'].'文件上传被php扩展程序中断';
    93                 break;
    94         }
    95         return $res;
    96     }
    97 }
  • 相关阅读:
    用例的粒度问题
    REST和RPC最大区别
    成功的结对编程要点
    我认为技术经理应该做的事儿
    敏捷测试实践
    DDD-围绕业务逻辑编程
    依赖反转原则
    Kafka和Rabbitmq的最大区别
    Cassandra快速两次写入导致顺序不对的问题
    DotNetBar之SupergridControl显示图片,行距自动调整
  • 原文地址:https://www.cnblogs.com/bwcx/p/file2.html
Copyright © 2011-2022 走看看