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

2023-05-16

上回提到 PHP的单个文件上传、多个单文件上传、多文件上传

这里给出 三种方式的统一实现

下面先给出各种方式的文件提交页面:

单个文件上传 upload1.php

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>单文件上传</title>
</head>
<body>
    <form action="doAction5.php" method="post" enctype="multipart/form-data">
        请选择您要上传的文件:
        <input type="file" name="myFile"/><br/>
        <input type="submit" value="上传文件"/>
    </form>
</body>
</html>

多个单文件上传 upload2.php

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>多个单文件上传</title>
</head>
<body>
    <form action="doAction5.php" method="post" enctype="multipart/form-data">
        请选择您要上传的文件:<input type="file" name="myFile1"/><br/>
        请选择您要上传的文件:<input type="file" name="myFile2"/><br/>
        请选择您要上传的文件:<input type="file" name="myFile3"/><br/>
        请选择您要上传的文件:<input type="file" name="myFile4"/><br/>
        <input type="submit" value="上传文件"/>
    </form>
</body>
</html>

多文件上传 upload3.php

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>多文件上传</title>
</head>
<body>
    <form action="doAction5.php" method="post" enctype="multipart/form-data">
        请选择您要上传的文件:<input type="file" name="myFile[]"/><br/>
        请选择您要上传的文件:<input type="file" name="myFile[]"/><br/>
        请选择您要上传的文件:<input type="file" name="myFile[]"/><br/>
        请选择您要上传的文件:<input type="file" name="myFile[]"/><br/>
        <input type="submit" value="上传文件"/>
    </form>
</body>
</html>
混合方式文件上传 upload4.php

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>混合方式文件上传</title>
</head>
<body>
    <form action="doAction5.php" method="post" enctype="multipart/form-data">
        请选择您要上传的文件:<input type="file" name="myFile1"/><br/>
        请选择您要上传的文件:<input type="file" name="myFile2"/><br/>
        请选择您要上传的文件:<input type="file" name="myFile[]"/><br/>
        请选择您要上传的文件:<input type="file" name="myFile[]"/><br/>
        请选择您要上传的文件:<input type="file" name="myFile[]" multiple="multiple"/><br/>
        <input type="submit" value="上传文件"/>
    </form>
</body>
</html>

文件上传处理 doAction5.php

<?php
/**
 * Created by PhpStorm.
 * User: DreamBoy
 * Date: 2016/4/8
 * Time: 21:39
 */
header('content-type:text/html;charset=utf-8');
include_once 'upload.func.php';

$files = getFiles();
//print_r($files);

foreach($files as $fileInfo) {
    $res = uploadFile($fileInfo);
    echo $res['mes'],'<br/>';

    if(isset($res['dest'])) {
        $uploadFiles[] = $res['dest'];
    }
}
//过滤掉上传失败的文件
/**
 * array_values() 函数返回一个包含给定数组中所有键值的数组,但不保留键名。
 * 提示:被返回的数组将使用数值键,从 0 开始并以 1 递增。
 */
/**
 * array_filter() 函数用回调函数过滤数组中的值。
 * 该函数把输入数组中的每个键值传给回调函数。如果回调函数返回 true,
 * 则把输入数组中的当前键值返回结果数组中。数组键名保持不变。
 */
//这里使用array_filter过滤掉数组中的空内容
if(isset($uploadFiles)) {
    $uploadFiles=array_filter($uploadFiles);

    print_r($uploadFiles);
}


实现文件上传的函数 upload.func.php

<?php
/**
 * Created by PhpStorm.
 * User: DreamBoy
 * Date: 2016/4/8
 * Time: 21:41
 */
/**
 * 构建上传文件信息
 * @return mixed
 */
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 $key=>$val) {
                $files[$i]['name'] = $file['name'][$key];
                $files[$i]['type'] = $file['type'][$key];
                $files[$i]['tmp_name'] = $file['tmp_name'][$key];
                $files[$i]['error'] = $file['error'][$key];
                $files[$i]['size'] = $file['size'][$key];
                $i++;
            }
        }
    }
    return $files;
}

/**
 * 获取文件扩展名
 */
function getExt($filename) {
    return strtolower(pathinfo($filename,PATHINFO_EXTENSION));
}

/**
 * 获取唯一字符串
 */
function getUniName() {
    return md5(uniqid(microtime(true), true));
}

/**
 * 针对于单文件、多个单文件、多文件的上传
 * @param array $fileInfo
 * @param string $path
 * @param bool $flag
 * @param int $maxSize
 * @param array $allowExt
 * @return array
 */
function uploadFile($fileInfo, $path='./uploads',$flag=true,$maxSize=1048576,$allowExt = array('jpeg','jpg','gif','png')) {
    //$allowExt = array('jpeg','jpg','gif','png');
    //$flag = true;
    //$maxSize = 1048576; //1M

    $res = array();

    //判断错误号
    if($fileInfo['error'] == UPLOAD_ERR_OK) {
        //检测上传文件的大小
        if($fileInfo['size'] > $maxSize) {
            $res['mes'] = $fileInfo['name'] . '上传文件过大';
        }

        $ext = getExt($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'] . '文件不是通过HTTP POST方式上传上来的';
        }

        if($res) return $res;

        //$path = './uploads';
        if(!file_exists($path)) {
            mkdir($path, 0777, true);
            chmod($path, 0777);
        }
        $uniName = getUniName();
        $destination = $path . '/' . $uniName . '.' . $ext;
        if(!move_uploaded_file($fileInfo['tmp_name'],$destination)) {
            $res['mes'] = $fileInfo['name'] . '文件移动失败';
        }

        $res['mes'] = $fileInfo['name'] . '上传成功';
        $res['dest'] = $destination;

        return $res;
    } else {
        //匹配错误信息
        switch($fileInfo['error']) {
            case 1:
                $res['mes'] = '上传文件超过了PHP配置文件中upload_max_filesize选项的值';
                break;
            case 2:
                $res['mes'] = '超过了表单MAX_FILE_SIZE限制的大小';
                break;
            case 3:
                $res['mes'] = '文件部分被上传';
                break;
            case 4:
                $res['mes'] = '没有选择上传文件';
                break;
            case 6:
                $res['mes'] = '没有找到临时目录';
                break;
            case 7:
            case 8:
                $res['mes'] = '系统错误';
                break;
        }
        return $res;
    }
}




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • JS动画框架及案例

    JS动画效果 xff1a 综合 运动框架 move js 1 简单动画 1 1 速度动画 D01 share html 1 2 透明度动画 D02 opacity html 2 缓冲动画 2 1 缓冲动画 D03 speed html 3
  • Javascript异步编程之setTimeout与setInterval

    转载自 xff1a http www cnblogs com tugenhua0707 p 4083475 html utm source 61 tuicool amp utm medium 61 referral Javascript异步
  • javascript下的瀑布流效果

    以下瀑布流效果增加了本地加载数据的功能 xff0c 实际上加载更多的图片应该通过网络进行获取 xff0c 这里只是进行了本地图片传送的模拟 目录结构如下 xff1a index html lt DOCTYPE html gt lt html
  • 远程共享文件夹读写数据Software caused connection abort: recv failed和 Invalid payload size: 405

    Software caused connection abort recv failed 一般是JAR包版本不对 xff0c 我用得jcifs 1 3 3 jar包错 xff0c 改为jcifs 1 3 17 jar就可以了 span cl
  • jQuery下的瀑布流效果

    使用jQuery制作瀑布流效果 xff0c 这里需要引入jQuery库 index html lt DOCTYPE html gt lt html lang 61 34 en 34 gt lt head gt lt meta charset
  • 使用js实现tab选项卡效果

    这里提供了一种制作选项卡的思路 在制作过程中首先考虑的是html结构 xff0c 元素如何摆放 xff0c 此外通过这样的摆放 xff0c 通过CSS样式是否可以达到我们所要的效果 最后通过js进行监听 xff0c 当进行选项卡切换时 xf
  • 使用js实现“别踩白块儿”游戏

    界面如下 xff1a 点击 开始游戏 xff0c 白格 将开始向下移动 xff0c 此后再每一行上开始出现一个 黑格 xff0c 对应列上按下对应的键即可消除黑格 xff0c 但不可跨行消除 xff08 即必须先消除 最近 一行上的 黑格
  • AJAX 跨域请求 - JSONP获取JSON数据

    转载自 xff1a 点击打开链接 Asynchronous JavaScript and XML Ajax 是驱动新一代 Web 站点 xff08 流行术语为 Web 2 0 站点 xff09 的关键技术 Ajax 允许在不干扰 Web 应
  • Ajax的实现和jQuery下的Ajax

    什么是Ajax呢 xff1f AJAX即 A synchronous J avascript A nd X ML xff08 异步JavaScript和XML xff09 xff0c 是指一种创建交互式网页应用的网页开发技术 AJAX 61
  • jQuery下的瀑布流效果(改)

    使用 window on 34 resize 34 waterfall 使得瀑布流列数可以动态变化 包含加载数据的模拟 useJQ html lt DOCTYPE html gt lt html lang 61 34 en 34 gt lt
  • 带有分散效果的瀑布流(jQuery实现)

    初始数据集中在窗口底部 xff0c 通过动画移动摆动到正确的位置 xff0c 同样模拟网络加载数据时 xff0c 图片也从窗口底部 动画 摆放到正确的位置 如下图所示 xff0c 这是初始数据移动的过程 移动结束后 xff0c 初始数据摆放
  • 使用jQuery、js实现必应搜索制作

    实现过程参考自 慕课网 xff0c 有关具体详情可参考视频 实现必应搜索制作 xff0c 结果如下 xff1a 点击提示框中的选项进行对应的跳转 xff08 在当前页面 xff09 xff1a 使用Ajax提交http请求 xff0c 从必
  • 网页在IE6下可能出现的小问题

    我们制作网页过程中 xff0c 需要对网页进行调试以兼容不同浏览器 这里使用IETester 针对网页在IE6进行调试 xff0c 解决一些可能出现的问题 1 在IE6可能会出现双边距 双边距出现的条件是当浮动元素的浮动方向和margin的
  • 雅虎WEB前端网站优化 -- 34条军规

    转载自 xff1a 点击打开链接 雅虎给出了优化网站加载速度的34条法则 xff08 包括Yslow规则22条 xff09 详细说明 xff0c 下载转发 ponytail 的译文 xff08 来自帕兰映像 xff09 1 Minimize
  • 91. Decode Ways(解码方法)

    这道题的关键在于推导出递推公式 xff0c 这里我将存储的数组定义为code xff0c 字符串为s xff0c code i 代表前i个字符可解码的数量 xff0c 即code i 代表的是s i 1 及之前字符的总解码数量 很明显可知c
  • PHP中的字符串定义——Heredoc结构形式

    在php中字符串类型可以用三种方法定义 xff1a 单引号形式 双引号形式和Heredoc结构形式 单引号形式和双引号的定义形式如下 xff1a lt php str string1 61 39 我是字符串 39 单引号 str strin
  • php get_magic_quotes_gpc()函数用法介绍

    转载自 xff1a 点击打开链接 magic quotes gpc函数在php中的作用是判断解析用户提示的数据 xff0c 如包括有 post get cookie过来的数据增加转义字符 xff0c 以确保这些数据不会引起程序 xff0c
  • PHP 单一入口

    转载自 xff1a 点击打开链接 单一入口概述 单一入口的应用程序就是说用一个文件处理所有的HTTP请求 xff0c 例如不管是列表页还是文章页 xff0c 都是从浏览器访问index php文件 xff0c 这个文件就是这个应用程序的单一
  • PHP下的MVC

    学习资源来自于慕课网 先来一个简单的Demo SimpleDemo 控制器C testController class php lt php class testController function show 控制器的作用是调用模型 xf
  • PHP操作mysql类的封装

    版本一 xff1a lt php 这是一个工具类 xff0c 作用是完成对数据库的操作 class SqlHelper public conn public dbname 61 34 test 34 public username 61 3

随机推荐

  • 简单新闻发布系统前台界面(html+css)

    运行效果如下 xff1a 图片素材 xff1a bg jpg header shadow png news icon png index html lt DOCTYPE html gt lt html lang 61 34 zh CN 34
  • 视图引擎Smarty的简单使用

    参考 xff1a http www jb51 net article 5091 htm 参考 xff1a http baike baidu com link url 61 FFySw2r dsE lTdQgGy2DpLhciXM JqUag
  • 简易 文章发布系统——后台管理系统

    来自于慕课网的学习 这里建立一个简易的文章发布系统 后台管理系统 xff0c 功能包括 文章的发表 查看文章列表 xff0c 其中还提供对文章的删除和修改功能 首先使用mysql建立数据库 info xff0c 在info数据库中建立一张
  • 简易 文章发布系统——前台界面

    续 简易 文章发布系统 后台管理系统 源自 慕课网 的学习 关于简易文章发布系统 后台管理系统大致已经制作完毕 xff0c 但是从安全方面来看 xff0c 程序质量不高 xff0c 只适合初学者进行学习开发 xff0c 掌握php的开发流程
  • PHP实现页面静态化——全部纯静态化

    先来看看php在服务器的执行过程 xff1a 当用户请求服务器php文件的时候 xff0c 服务器将对php文件进行语法分析 xff0c 其次是解析 xff0c 最后才运行 当php文件有内容输出时 xff0c 该内容会先经过服务器的php
  • PHP实现页面静态化——局部动态化

    上回说到 xff1a PHP实现页面静态化 全部纯静态化 这次实现PHP的局部动态化 xff0c 也就是说静态化的页面存在 动态 过程 xff0c 结合全部静态化技术 43 Ajax技术实现局部动态化 xff0c 局部更新页面 在上文的数据
  • CSS3的过渡 transition

    这里只考虑 chrome 的兼容 transition html lt DOCTYPE html gt lt html lang 61 34 en 34 gt lt head gt lt meta charset 61 34 UTF 8 3
  • CSS3中的3D旋转 rotate、3D位移 translate

    这里只考虑 chrome 的兼容 3DrotateDemo html lt DOCTYPE html gt lt html lang 61 34 en 34 gt lt head gt lt meta charset 61 34 UTF 8
  • CSS3让登陆面板旋转起来

    这里只考虑chrome的兼容 LoginRotate html lt DOCTYPE html gt lt html lang 61 34 en 34 gt lt head gt lt meta charset 61 34 UTF 8 34
  • CSS3 卡片翻转(transform)

    这里只考虑chrome的兼容 card1 html lt DOCTYPE html gt lt html lang 61 34 en 34 gt lt head gt lt meta charset 61 34 UTF 8 34 gt lt
  • 他们的CSS3 3D正方体

    摘自 xff1a 程旭元 所分享的程序 效果图如下 xff1a cube html lt DOCTYPE html gt lt html lang 61 34 zh CN 34 gt lt head gt lt title gt 3D正方体
  • html自定义复选框

    自定义复选框的素材 xff1a icon check circle png icon checked png checkbox html xff08 为了方便起见 xff0c 这里使用到了jQuery xff09 lt DOCTYPE ht
  • CSS3的基本介绍

    知识点记录 xff1a 1 圆角效果 border radius 如 xff1a border radius 10px 所有角都使用半径为10px 的圆角 border radius 5px 4px 3px 2px 四个半径值分别是左上角
  • CSS3选择器(上)

    1 属性选择器 E att 61 val 选择匹配元素 E xff0c 且 E元素定义了属性 att xff0c 其属性值以 val开头的任何字符串 E att 61 val 选择匹配元素 E xff0c 且 E元素定义了属性 att xf
  • CSS3实现曲线阴影和翘边阴影

    效果图如下 xff1a index html lt DOCTYPE html gt lt html lang 61 34 en 34 gt lt head gt lt meta charset 61 34 UTF 8 34 gt lt ti
  • THINKPHP 数据操作方法

    一 ThinkPHP Insert 添加数据 ThinkPHP 内置的 add 方法用于向数据表添加数据 xff0c 相当于 SQL 中的 INSERT INTO 行为 添加数据 add 方法是 CURD xff08 Create Upda
  • PHP文件上传的实现及其介绍

    关于实现及介绍在程序注释中 提交文件的页面 xff1a xff08 可以分别提交到doAction php doAction1 php doAction2 php进行测试 xff09 upload php lt doctype html g
  • PHP单文件上传的过程化函数封装

    提交文件的页面 xff1a upload php lt doctype html gt lt html lang 61 34 en 34 gt lt head gt lt meta charset 61 34 UTF 8 34 gt lt
  • PHP的单个文件上传、多个单文件上传、多文件上传

    单文件上传 upload1 php lt doctype html gt lt html lang 61 34 en 34 gt lt head gt lt meta charset 61 34 UTF 8 34 gt lt title g
  • PHP实现单文件上传、多个单文件上传、多文件上传的过程化封装

    上回提到 PHP的单个文件上传 多个单文件上传 多文件上传 这里给出 三种方式的统一实现 下面先给出各种方式的文件提交页面 xff1a 单个文件上传 upload1 php lt doctype html gt lt html lang 6