PHP 实现一种多文件上传的方法

当需要上传多个文件时,一种常见的做法是使用多个 input type=file 标签分别上传。但使用这种方式,每个文件需要单独发送一个 HTTP 请求,会造成服务器负担过大。所以我们可以采用 PHP 实现多文件上传。

具体实现步骤如下:

  1. 在 HTML 表单中设置 enctype 属性
<form action="upload.php" method="POST" enctype="multipart/form-data">

需要设置 enctype 为 multipart/form-data,因为文件会以二进制方式读取和传输。

  1. 在 PHP 部分编写文件上传程序
//上传的文件保存目录
$target_path = "uploads/";
$errors = "";

//遍历所有文件
foreach($_FILES['file']['name'] as $key=>$name) {
    //判断是否上传文件
    if ($_FILES['file']['tmp_name'][$key] != "" && $_FILES['file']['error'][$key] == 0) {
        //获取文件名和扩展名
        $filename = basename($_FILES['file']['name'][$key]);
        $ext = pathinfo($filename, PATHINFO_EXTENSION);
        //生成唯一的文件名
        $newname = uniqid().".".$ext;
        //文件存放的完整路径
        $target_file = $target_path.$newname;
        //判断文件是否已经存在
        if (file_exists($target_file)) {
            $errors .= "文件 ".$newname." 已经存在,上传失败。<br>";
        } else {
            //将文件从临时目录移动到上传目录
            if (move_uploaded_file($_FILES['file']['tmp_name'][$key], $target_file)) {
                echo "文件上传成功:".$newname."<br>";
            } else {
                $errors .= "文件 ".$newname." 上传失败。<br>";
            }
        }
    }
}

if ($errors != "") {
    echo "<div>".$errors."</div>";
}

以上 PHP 代码会将上传的文件保存到指定目录。

其中 $_FILES['file']['name']、$_FILES['file']['tmp_name']、$_FILES['file']['error'] 是 PHP 预定义数组,分别表示上传的文件名、临时文件名和错误信息。在多文件上传时,这些数组的值是个数组,需要使用 foreach 循环遍历。

示例 1:上传单个文件

HTML 代码

<form action="upload.php" method="POST" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" value="上传">
</form>

PHP 代码

//上传的文件保存目录
$target_path = "uploads/";

if ($_FILES['file']['tmp_name'] != "" && $_FILES['file']['error'] == 0) {
    //获取文件名和扩展名
    $filename = basename($_FILES['file']['name']);
    $ext = pathinfo($filename, PATHINFO_EXTENSION);
    //生成唯一的文件名
    $newname = uniqid().".".$ext;
    //文件存放的完整路径
    $target_file = $target_path.$newname;
    //将文件从临时目录移动到上传目录
    if (move_uploaded_file($_FILES['file']['tmp_name'], $target_file)) {
        echo "文件上传成功:".$newname;
    } else {
        echo "文件上传失败";
    }
}

示例 2:上传多个文件

HTML 代码

<form action="upload.php" method="POST" enctype="multipart/form-data">
    <input type="file" name="file[]" multiple>
    <input type="submit" value="上传">
</form>

PHP 代码(同上,只是需要遍历 $_FILES['file']['name'] 数组)

//上传的文件保存目录
$target_path = "uploads/";
$errors = "";

//遍历所有文件
foreach($_FILES['file']['name'] as $key=>$name) {
    //判断是否上传文件
    if ($_FILES['file']['tmp_name'][$key] != "" && $_FILES['file']['error'][$key] == 0) {
        //获取文件名和扩展名
        $filename = basename($_FILES['file']['name'][$key]);
        $ext = pathinfo($filename, PATHINFO_EXTENSION);
        //生成唯一的文件名
        $newname = uniqid().".".$ext;
        //文件存放的完整路径
        $target_file = $target_path.$newname;
        //判断文件是否已经存在
        if (file_exists($target_file)) {
            $errors .= "文件 ".$newname." 已经存在,上传失败。<br>";
        } else {
            //将文件从临时目录移动到上传目录
            if (move_uploaded_file($_FILES['file']['tmp_name'][$key], $target_file)) {
                echo "文件上传成功:".$newname."<br>";
            } else {
                $errors .= "文件 ".$newname." 上传失败。<br>";
            }
        }
    }
}

if ($errors != "") {
    echo "<div>".$errors."</div>";
}

以上就是 PHP 实现一种多文件上传的方法的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP 实现一种多文件上传的方法 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • PHP数组操作——获取数组最后一个值的方法

    下面是“PHP数组操作——获取数组最后一个值的方法”的完整攻略: 前言 当我们需要获取一个数组的最后一个值时,可以通过一些简单的方法来实现。在实际开发中,这种操作是很常见的,下面我将介绍一些获取数组最后一个值的方法。 一、使用end()函数获取数组最后一个值 end() 函数把指针移动到最后一个元素并返回其值。 $arr = array(‘one’, ‘tw…

    PHP 2023年5月26日
    00
  • 微信小程序网络封装(简单高效)

    微信小程序网络封装(简单高效) 什么是网络封装 网络封装是指在原有的网络请求框架基础上,通过封装来简化网络请求的操作。在实际开发中,封装网络请求可以减少代码的重复率,提高项目的可维护性、可读性、可扩展性等方面的优势。另外,依据业务需求,也可以实现网络请求的统一管理、统一处理等操作。 微信小程序网络请求模块 在微信小程序中,提供了基于Promise的网络请求A…

    PHP 2023年5月30日
    00
  • 搭建redis续更~

    “心有所向,日复一日,必有精进”前言:想必大家看完我之前写的搭建redis服务器,大家都已经把redis搭建起来了吧如果没有搭建起来的小可爱请移步这里哦从0到1搭建redis6是不是还没看够呢,现在它来了,搭建完redis服务器,我们肯定要去用的,下面我们会一步步讲解redis cluster向PHP客户端扩展。 七、redis cluster 向客户端扩展…

    PHP 2023年4月18日
    00
  • PHP递归调用数组值并用其执行指定函数的方法

    下面是详细的讲解: PHP递归调用数组值并用其执行指定函数的方法 什么是递归调用? 递归(Recursion)是指在程序执行中调用自身的编程技巧。递归函数是在一个函数内部调用自身的函数,可以用于解决许多复杂的问题,例如二叉树的遍历、快速排序、阶乘计算等。 如何递归调用数组值并用其执行指定函数? 在PHP中,我们可以通过递归函数来遍历数组的所有元素并执行指定的…

    PHP 2023年5月26日
    00
  • php中常用的正则表达式的介绍及应用实例代码

    让我们来详细讲解一下“php中常用的正则表达式的介绍及应用实例代码”。 1. 正则表达式介绍 在 PHP 中,可以使用正则表达式进行匹配文本。正则表达式是由字母和符号组成的模式,可以用来匹配、过滤或替换文本。比如,可以使用正则表达式匹配邮箱、电话号码、身份证号码等等。 常见的正则表达式符号: 符号 描述 ., ?, +, *, [], {}, () 这些符号…

    PHP 2023年5月23日
    00
  • PHP简单系统查询模块代码打包下载

    PHP简单系统查询模块代码打包下载的攻略包含以下几个步骤: 步骤1:创建查询模块代码 首先,需要创建一个查询模块的PHP代码文件。可以使用任何的开发工具,例如Notepad++, Sublime Text, Eclipse等等来进行代码编写。 以Notepad++为例,创建一个新文件,并将以下代码复制到文件中: <?php // 定义连接MySQL数据…

    PHP 2023年5月30日
    00
  • PHP中如何定义和使用常量

    首先,我们需要了解什么是常量。在PHP中,常量是指值不能被更改的标识符(标识符通常是一个名字),类似于变量,但是常量在程序中是不可改变的。常量的作用是为了在程序中定义一些不可变的值,使程序更加明确和易于维护。 PHP中定义和使用常量的步骤如下: 1.使用define()函数来定义常量define()函数需要两个参数,第一个参数是常量的名称,第二个参数是常量的…

    PHP 2023年5月25日
    00
  • PHP创建对象的六种方式实例总结

    PHP创建对象的六种方式实例总结 在PHP中,我们常常需要创建对象,使用对象完成各种需求。本文将介绍创建对象的六种方式,并提供相应的示例代码。 1. 通过new关键字创建对象 我们可以通过new关键字创建一个对象。在使用new关键字时,我们需要指定要创建的对象的类名,并可选地向该类的构造函数传递参数。 示例代码: class Person { private…

    PHP 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部