php多个文件及图片上传实例详解

PHP多个文件及图片上传实例详解

本文将详细讲解PHP多个文件及图片上传的过程,使读者能够了解如何使用PHP编写上传文件的功能。主要内容包括:

  1. 表单上传方式
  2. Ajax异步上传方式
  3. 文件大小限制、类型限制
  4. 上传进度条显示

1. 表单上传方式

表单上传方式是最常用的文件上传方式,其基本原理是利用

标签的enctype属性来指定表单数据的编码类型,将数据以二进制形式上传到服务器;PHP代码接收上传的数据并处理。

示例代码:

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

上述代码中,action指定上传后的处理页面;method指定提交方式;enctype指定表单数据编码类型,其中multipart/form-data表示二进制编码。

PHP代码示例:

if(isset($_POST['submit'])){
    $files = $_FILES['file'];
    for($i=0;$i<count($files['name']);$i++){
        $tmp_name = $files['tmp_name'][$i];
        $name = $files['name'][$i];
        $size = $files['size'][$i];
        $error = $files['error'][$i];
        //处理上传逻辑代码
    }
}

上述代码中,通过$_FILES数组获取文件上传信息,其中$_FILES['file']表示上传文件的input元素的name属性值。使用for循环遍历上传文件,获取上传文件的临时文件名、文件原始名、文件大小和文件上传状态,进而进行上传文件的处理逻辑。

2. Ajax异步上传方式

与表单上传方式不同,Ajax异步上传方式无需刷新整个页面,实现更加流畅的上传体验。其原理是通过XMLHttpRequest对象将文件上传到服务器,服务器处理后返回数据。

示例代码:

var fileInput = document.getElementById('file');
var fileList = fileInput.files;
var form = new FormData();
for(var i=0;i<fileList.length;i++){
    form.append('file[]',fileList[i]);
}
var xhr = new XMLHttpRequest();
xhr.open('POST','upload.php');
xhr.upload.onprogress = function(e){
    if(e.lengthComputable){
        var percent = e.loaded/e.total*100;
        console.log(percent);
    }
}
xhr.send(form);

上述代码中,获取上传文件的FileList,使用FormData将文件上传到服务器,利用XMLHttpRequest对象完成异步上传。其中xhr.upload.onprogress用于实现上传进度条显示。

PHP代码示例:

if(isset($_FILES['file'])){
    $files = $_FILES['file'];
    for($i=0;$i<count($files['name']);$i++){
        $tmp_name = $files['tmp_name'][$i];
        $name = $files['name'][$i];
        $size = $files['size'][$i];
        $error = $files['error'][$i];
        //处理上传逻辑代码
    }
    //返回数据格式为json
    echo json_encode(array('status'=>1,'message'=>'success'));
}

上述代码中,判断是否有上传文件,获取文件上传信息,进行文件上传处理,最后以json格式返回处理结果。

3. 文件大小限制、类型限制

为了保障上传文件的安全性,需要限制上传文件的大小和类型。

示例代码:

$maxSize = 1024*1024*10;//10M
$allowType = array('image/jpeg','image/png','image/gif');
if(isset($_FILES['file'])){
    $files = $_FILES['file'];
    for($i=0;$i<count($files['name']);$i++){
        $tmp_name = $files['tmp_name'][$i];
        $name = $files['name'][$i];
        $type = $files['type'][$i];
        $size = $files['size'][$i];
        $error = $files['error'][$i];
        if(!in_array($type,$allowType)){
            echo '上传文件类型不正确';
            exit;
        }
        if($size>$maxSize){
            echo '上传文件大小超过限制';
            exit;
        }
        //处理上传逻辑代码
    }
}

上述代码中,通过设置$maxSize和$allowType变量,分别限制上传文件的大小和类型。在上传文件前,使用判断语句进行限制判断,避免上传危险文件。

4. 上传进度条显示

为了提高用户体验,需要为上传文件添加进度条显示功能。

示例代码:

var xhr = new XMLHttpRequest();
xhr.onload = function(){
    if(xhr.status === 200){
        console.log('上传完成');
    }else{
        console.log('上传失败');
    }
}
xhr.upload.onprogress = function(e){
    if(e.lengthComputable){
        var percent = e.loaded/e.total*100;
        console.log(percent);
        //获取进度条元素并设置width属性
        var progress = document.getElementById('progress');
        progress.style.width = percent + '%';
    }
}
xhr.send(form);

上述代码中,利用XMLHttpRequest对象的upload属性的onprogress事件,实现上传进度条的动态显示。在上传过程中,获取上传进度,计算出上传进度所占百分比,设置进度条元素的width属性,从而实现上传进度条的动态显示。

综上所述,本文详细介绍了PHP多个文件及图片上传的实现方式,包括表单上传方式、Ajax异步上传方式、文件大小限制、类型限制和上传进度条显示。希望读者能够通过本文的介绍,掌握PHP实现文件上传的技能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php多个文件及图片上传实例详解 - Python技术站

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

相关文章

  • PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)

    PHP入门教程之字符串处理技巧总结 介绍 PHP中字符串是必不可少的。字符串处理是几乎所有Web应用程序的必备特点。在这篇文章中,我们将介绍有关PHP字符串的各种技巧,包括字符串的转换、过滤、解析、查找、截取、替换等。 字符串转换 将字符串转为小写或大写 $string = "Hello, World!"; $lowercase = st…

    PHP 2023年5月26日
    00
  • php绘图之加载外部图片的方法

    如何在 PHP 中加载外部图片并且进行绘图呢?这里提供两种方法:使用 GD 库和使用 Imagick 库。 使用 GD 库 使用 GD 库,你可以使用 PHP 在一张图片上绘制基本的形状、文字、边框等等。接下来是使用 GD 绘制一张图片,并在其上添加另一张图片的示例代码: <?php // 创建一个画布 $image = imagecreatetrue…

    PHP 2023年5月30日
    00
  • PHP实现的多维数组去重操作示例

    PHP实现的多维数组去重操作示例 在PHP中,使用多维数组时,有时候需要对其中的重复元素进行去重操作。下面介绍一些PHP实现的多维数组去重操作示例。 方法一:使用array_map()函数 //定义一个示例数组 $array = array( array(‘id’=>’001’, ‘name’=>’张三’), array(‘id’=>’00…

    PHP 2023年5月26日
    00
  • 基于php常用函数总结(数组,字符串,时间,文件操作)

    基于 PHP 常用函数总结 本文总结了 PHP 中常用的数组、字符串、时间、文件操作等函数。这些函数在 PHP 中使用频率很高,熟练掌握这些函数可以提高 PHP 开发效率。 数组操作 PHP 中的数组是一个非常强大的数据结构,以下是常用的数组操作函数: array_unique array_unique 函数从数组中移除重复的值,并返回一个新的不包含重复值的…

    PHP 2023年5月26日
    00
  • PHP单链表的实现代码

    下面是关于“PHP单链表的实现代码”的完整攻略: 一、单链表的概念 单链表是一种线性数据结构。与数组不同,链表中的元素在内存中不是连续放置的,每个元素由一个存储本身元素的节点和一个指向下一个元素的指针组成。 二、单链表的实现 1. 定义单链表节点类 首先,我们需要定义一个节点类,用来表示单链表中的节点。每个节点应该包含一个数据域(存放节点的值)和一个指针域(…

    PHP 2023年5月27日
    00
  • 探讨php中遍历二维数组的几种方法详解

    完整攻略:探讨PHP中遍历二维数组的几种方法 一、什么是二维数组? 在PHP中,数组可以是多维的,二维数组就是指在一个数组中嵌套着一个或多个数组。例如下面这个二维数组: $arr = array( array(‘apple’, ‘orange’, ‘banana’), array(‘cat’, ‘dog’, ‘fish’), array(‘red’, ‘gr…

    PHP 2023年5月26日
    00
  • php字符串使用详细了解

    PHP字符串使用详细了解 在PHP中,字符串是一种常见的数据类型,用于存储文本数据。本文将详细讲解PHP字符串的使用方法,包括字符串的创建、连接、截取、换、格式化等操作。 创建字符串 在PHP中,可以使用单引号或双引号来创建字符串。单引号字符串中的变量不会被解析,而双号字符串中的变量会被解析。 以下是创建字符串的示例代码: $name = ‘John’; $…

    PHP 2023年5月12日
    00
  • 简单的php写入数据库类代码分享

    接下来我将为您详细讲解“简单的PHP写入数据库类代码分享”的完整攻略。 1. 编写数据库连接类 首先,我们需要编写数据库连接的类DB,使用PDO进行数据库连接,并且添加一个execute方法,用于执行SQL语句,代码如下所示: class DB { private $pdo; public function __construct($host,$user,$…

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