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日

相关文章

  • 56.com视频采集接口程序(PHP)

    对于”56.com视频采集接口程序(PHP)”,我们可以采用以下步骤来实现: 1. 获取视频信息 首先,我们需要获取视频信息,可以包括视频标题、时长、缩略图、播放地址等等。在56.com上,我们可以通过访问视频的API来获取这些信息。例如,可以通过以下API获取视频ID为339953464的视频信息: http://interface.56.com/vide…

    PHP 2023年5月23日
    00
  • 通过具体程序来理解PHP里面的抽象类

    一个抽象类是不能被直接实例化的,必须被子类继承并实现所有的抽象方法之后才能被实例化。在PHP里面,我们可以通过自定义一个抽象类并定义抽象方法来进行实践应用。下面是一个具体程序来理解PHP里面的抽象类。 创建一个抽象类 先创建一个抽象类,这个类里面定义了两个抽象方法,分别是getArea()和getPerimeter(),用于求图形的面积和周长。 abstra…

    PHP 2023年5月23日
    00
  • php FLEA中二叉树数组的遍历输出

    那我就给您详细讲解如何在 PHP FLEA 中进行二叉树数组的遍历输出。 前言 二叉树是常见的一种数据结构,PHP FLEA 框架提供了一种便捷的方式实现二叉树,它可以通过数组的形式组织二叉树结构,而且还提供了遍历整个二叉树的方法。 数组结构 在 FLEA 中,使用一维数组来组织二叉树的结构,每个数组元素都代表一个二叉树节点,其包含以下几个部分: uri: …

    PHP 2023年5月26日
    00
  • php实现zip文件解压操作

    以下是详细讲解“php实现zip文件解压操作”的完整攻略: 1. zip扩展的安装 zip扩展是用于PHP解压Zip文件的核心扩展,需要安装在服务器上才能使用。以下是zip扩展的安装方法: 在Linux系统下使用apt-get安装 sudo apt-get install php-zip 在Windows系统下,需要在php.ini中打开zip扩展的支持 在…

    PHP 2023年5月26日
    00
  • php tools for visual studio 完整可用破解详细教程

    为了保证版权合法,我无法提供“php tools for visual studio 完整可用破解详细教程”的攻略。但是,我可以提供一些关于 PHP 开发的工具和建议。下面是一些有用的信息和示例: PHP 开发工具 Visual Studio Code: 这是一个轻量级但强大的代码编辑器,拥有许多有用的功能和插件,适用于 PHP 开发人员。它支持语法高亮、代…

    PHP 2023年5月27日
    00
  • 一个完整的PHP类包含的七种语法说明

    一个完整的PHP类包含的七种语法说明是指:类声明、属性声明、方法声明、常量声明、构造方法、析构方法和命名空间声明。下面将逐一对这七种语法进行详细讲解。 类声明 类声明是PHP中定义类的语法结构,它由class关键字、类名、类体和一对花括号组成。类体中包含了类的属性和方法。 class MyClass { //类体中的属性和方法 } 属性声明 属性是类的一种成…

    PHP 2023年5月25日
    00
  • php实现用户登陆简单实例

    下面我将详细讲解如何用PHP实现用户登陆的简单实例,包含以下步骤: 步骤一:创建数据库 首先,我们需要在数据库中创建一个用户表,该表至少包含以下字段: id: 用户ID username: 用户名 password: 密码 email: 邮箱(可选) 在这里,我们将使用MySQL数据库,可以使用以下命令创建一个名为user的数据库: CREATE DATAB…

    PHP 2023年5月27日
    00
  • 如何在Windows平台下搭建PHP环境(phpnow图解版)

    以下是详细讲解如何在Windows平台下搭建PHP环境(phpnow图解版)的完整攻略: 环境概述 在Windows平台下,我们可以使用一些集成了Apache、PHP以及MySQL等软件的套装来快速地搭建PHP环境。其中phpnow就是其中的一个。 下载phpnow 首先,我们需要前往phpnow的官网(http://www.phpnow.cn/)下载最新版…

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