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

一:前导知识点:

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

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

3:创建目录函数 mkdir()

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

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

二:思路与流程

这里写图片描述

三:封装的函数代码

<?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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值