文件上传与下载学习笔记(2)---多文件、单文件、多个单文件函数封装

一:前导知识点:

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

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

3:创建目录函数 mkdir()

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

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

二:思路与流程

文件上传与下载学习笔记(2)---多文件、单文件、多个单文件函数封装_第1张图片

三:封装的函数代码

<?php
/** * 得到想要的文件类型 * @return unknown */
function getFiles() {
    $i = 0;
    foreach ( $_FILES as $file ) {
        // 判断是单文件
        if (is_string ( $file ['name'] )) {
            $files [$i] = $file;
            $i ++;
        // 判断是多文件
        } elseif (is_array ( $file ['name'] )) {
            foreach ( $file ['name'] as $k => $v ) {
                $files [$k] ['name'] = $v;
                $files [$k] ['type'] = $file ['type'] [$k];
                $files [$k] ['tmp_name'] = $file ['tmp_name'] [$k];
                $files [$k] ['error'] = $file ['error'] [$k];
                $files [$k] ['size'] = $file ['size'] [$k];
            }
        }
    }
    return $files;
}
/** * 上传文件 * @param unknown $fileInfo * @return string */
function uploadFiles($fileInfo, $path = "ttt",$allowExt = array ('jpg','jpeg','png','gif' ),$maxSize = 20000000,$flag = false) {
    //通过pathinfo得到文件扩展名
    $ext = pathinfo ( $fileInfo ['name'],PATHINFO_EXTENSION );
    //得到文件的唯一名称
    $uniName = md5 ( uniqid ( microtime ( true ), true ) ) . '.' . $ext;
    $destination = $path . '/' . $uniName;
    $res ['mes'] = null;
    //如果目录不存在,创建目录
    if (! file_exists ( $path )) {
        mkdir ( $path, 0777, true );
    }
    // 判断错误号
    if ($fileInfo ['error'] == 0) {
        // 判断文件大小
        if ($fileInfo ['size'] > $maxSize) {
            $res ['mes'] = $fileInfo['name']."上传文件过大";
        }
        // 判断文件类型
        if (! in_array ( $ext, $allowExt )) {
            $res ['mes'] =   $fileInfo['name']." 文件格式不正确";
        }
        // 判断是否是真的图片
        if ($flag) {
            if (! getimagesize ( $fileInfo ['tmp_name'] )) {
                $res ['mes'] = $fileInfo['name']."不是真的图片";
            }
        }
        // 判断是否通过HTTP POST 方式上传
        if (! is_uploaded_file ( $fileInfo ['tmp_name'] )) {
            $res ['mes'] = $fileInfo['name']."文件上传途径不正确";
        }
        // 如果有值,就结束返回
        if ($res ['mes'])
            return $res;
            // 移动文件
        if (move_uploaded_file ( $fileInfo ['tmp_name'], $destination )) {
            $res ['mes'] = $fileInfo['name']."文件上传成功";
            $res ['dst'] = $destination;
        }
        return $res;
    } else {
        switch ($fileInfo['error']) {
            case 1 :
                $res ['mes']= $fileInfo['name'].'上传文件超过了upload_max_filesize 选项的值';
                break;
            case 2 :
                $res ['mes']= $fileInfo['name'].'超过了表单MAX_FILE_SIZE限制的大小';
                break;
            case 3 :
                $res ['mes']= $fileInfo['name'].'文件上传不完整';
                break;
            case 4 :
                $res ['mes']= $fileInfo['name'].'没有选择上传文件';
                break;
            case 6 :
                $res ['mes']= $fileInfo['name'].'没有找到临时目录';
                break;
            case 7 :
                $res ['mes']= $fileInfo['name'].'文件写入失败';
                break;
            case 8 :
                $res ['mes']= $fileInfo['name'].'文件上传被php扩展程序中断';
                break;
        }
        return $res;
    }
}

你可能感兴趣的:(文件上传与下载学习笔记(2)---多文件、单文件、多个单文件函数封装)