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

yizhihongxing

当需要上传多个文件时,一种常见的做法是使用多个 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验证码类文件及调用方式代码详解”的完整攻略。 什么是验证码? 验证码(CAPTCHA)是指计算机程序为了判断用户是否为机器人或恶意程序而设计的一种测试。通常只有人类才能通过这种测试,这是因为验证码的目的就是要通过对抗机器学习和自动化脚本,来防止恶意程序负责恶意攻击或者注册大量垃圾账户。 如何生成验证码? 生成验证码的方式非常多,…

    PHP 2023年5月26日
    00
  • Yii调试SQL的常用方法

    下面是详细讲解“Yii调试SQL的常用方法”的完整攻略: 1. Yii调试SQL的必备工具 要调试Yii应用程序中的SQL查询,必须了解以下几个工具: Yii内置的调试器:Yii框架提供了一个调试器,可以在Web应用程序中显示SQL查询和其他调试信息。启用它可以快速定位SQL查询问题。 Xdebug调试器:Xdebug是一款PHP调试器,可以在PHP代码运行…

    PHP 2023年5月23日
    00
  • php输入流php://input使用示例(php发送图片流到服务器)

    下面是“php输入流php://input使用示例(php发送图片流到服务器)”的完整攻略。 什么是php://input php://input是PHP的输入流,我们可以用它来读取HTTP请求的原始数据。在处理POST请求中的文件上传、JSON数据等特殊请求时,使用php://input可以更加灵活地处理请求中的数据。 示例一:接收POST请求JSON数据…

    PHP 2023年5月26日
    00
  • PHP数字字符串左侧补0、字符串填充和自动补齐的几种方法

    首先,在PHP中,我们可以使用str_pad()函数对字符串进行填充操作,该函数可以在指定的字符串左侧或右侧添加指定数量的字符,使得字符串达到指定的总长度。 具体语法如下: string str_pad( string $input, int $pad_length, string $pad_string, int $pad_type = STR_PAD_R…

    PHP 2023年5月26日
    00
  • JavaScript浏览器的跨域问题解决方案

    JavaScript浏览器的跨域问题解决方案是在Web开发中经常遇到的问题,本文将从以下四个方面进行详细说明: 什么是跨域问题 跨域问题解决方案 JSONP解决跨域问题 CORS解决跨域问题 1. 什么是跨域问题 在Web开发过程中,当一个页面通过ajax异步请求获取其它域名下的资源时,会出现跨域问题。例如,当前网页为http://www.example.c…

    PHP 2023年5月23日
    00
  • PHP删除数组中特定元素的两种方法

    当我们使用 PHP 数组时,有时候需要删除特定元素以满足我们的需要。在 PHP 中,有两种方法可以删除数组中特定元素,分别是使用 unset() 函数和使用 array_splice() 函数。 使用 unset() 函数删除数组中特定元素 unset() 函数可以用于删除数组中的单个元素。它的语法是: unset($array[$index]); 其中,$…

    PHP 2023年5月26日
    00
  • php实现处理输入转义字符的代码

    要实现处理输入转义字符的代码,需要以下几个步骤: 一、获取用户输入 要处理用户输入,首先需要获取用户输入的数据。可以通过$_GET,$_POST,或$_REQUEST等PHP内置变量来获取用户提交的表单数据。例如,获取一个表单中的username输入框的数据: $username=$_POST[‘username’]; 二、处理转义字符 1. addslas…

    PHP 2023年5月26日
    00
  • 微信小程序 http请求封装详解及实例代码

    针对“微信小程序 http请求封装详解及实例代码”,我提供如下攻略: 1. http请求封装 在微信小程序中,我们可以使用 wx.request 方法进行网络请求。但是在实际开发中,我们可能会在多个地方用到网络请求,而每一次都写一遍请求代码不太方便,也容易出错。因此,我们可以将 http 请求进行封装,提高开发效率和代码可维护性。 1.1 封装方法 我们可以…

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