当前位置:首页 > PHP

php实现多文件上传

2026-02-27 18:28:05PHP

PHP 多文件上传实现方法

前端表单设置

确保HTML表单中设置enctype="multipart/form-data"属性,并使用<input type="file" multiple>实现多文件选择:

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

后端处理逻辑

在PHP中通过$_FILES超全局数组接收文件,注意多文件会被组织为三维数组结构:

if(isset($_FILES['files'])){
    $fileCount = count($_FILES['files']['name']);

    for($i=0; $i<$fileCount; $i++){
        $fileName = $_FILES['files']['name'][$i];
        $fileTmp  = $_FILES['files']['tmp_name'][$i];
        $fileSize = $_FILES['files']['size'][$i];
        $fileError = $_FILES['files']['error'][$i];

        if($fileError === 0){
            $fileExt = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
            $newFileName = uniqid('', true).'.'.$fileExt;
            $uploadPath = 'uploads/'.$newFileName;

            move_uploaded_file($fileTmp, $uploadPath);
        }
    }
}

安全增强措施

添加文件类型和大小验证:

$allowedExts = ['jpg', 'png', 'pdf'];
$maxSize = 5 * 1024 * 1024; // 5MB

if(!in_array($fileExt, $allowedExts)){
    die("不允许的文件类型");
}

if($fileSize > $maxSize){
    die("文件大小超过限制");
}

错误处理机制

针对不同上传错误代码进行处理:

switch($fileError){
    case UPLOAD_ERR_INI_SIZE:
        $message = "文件超过服务器限制";
        break;
    case UPLOAD_ERR_FORM_SIZE:
        $message = "文件超过表单限制";
        break;
    case UPLOAD_ERR_PARTIAL:
        $message = "文件只有部分被上传";
        break;
    case UPLOAD_ERR_NO_FILE:
        $message = "没有文件被上传";
        break;
    case UPLOAD_ERR_NO_TMP_DIR:
        $message = "缺少临时文件夹";
        break;
    case UPLOAD_ERR_CANT_WRITE:
        $message = "写入磁盘失败";
        break;
    default:
        $message = "未知上传错误";
}

文件命名优化

使用更安全的文件名生成方式:

$safeName = preg_replace("/[^a-zA-Z0-9\.]/", "_", $fileName);
$newFileName = date('Ymd-His').'-'.$safeName;

完整示例代码

整合所有功能的完整实现:

php实现多文件上传

$uploadDir = 'uploads/';
if(!file_exists($uploadDir)){
    mkdir($uploadDir, 0755, true);
}

if(isset($_FILES['files'])){
    $allowed = ['jpg', 'jpeg', 'png', 'gif'];
    $maxSize = 5242880;

    foreach($_FILES['files']['tmp_name'] as $key => $tmpName){
        $fileName = $_FILES['files']['name'][$key];
        $fileSize = $_FILES['files']['size'][$key];
        $fileError = $_FILES['files']['error'][$key];
        $fileExt = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));

        if(in_array($fileExt, $allowed)){
            if($fileError === 0){
                if($fileSize <= $maxSize){
                    $newName = uniqid('', true).'.'.$fileExt;
                    $dest = $uploadDir.$newName;

                    if(move_uploaded_file($tmpName, $dest)){
                        echo "文件 {$fileName} 上传成功<br>";
                    }
                }
            }
        }
    }
}

标签: 文件上传php
分享给朋友:

相关文章

php实现打印功能

php实现打印功能

PHP 实现打印功能的方法 PHP 可以通过多种方式实现打印功能,具体取决于打印的目标(如打印机、PDF、网页等)和需求(如直接打印、生成打印预览等)。以下是几种常见的实现方式: 使用 JavaSc…

php 实现文件下载

php 实现文件下载

实现文件下载的基本方法 使用 PHP 实现文件下载的核心是通过设置 HTTP 头部信息,强制浏览器将文件作为附件下载而非直接显示。以下是一个基础实现示例: $file_path = '/path/t…

php实现聊天

php实现聊天

实现 PHP 聊天功能的方法 使用 WebSocket 和 PHP 实现实时聊天 WebSocket 是一种全双工通信协议,适合实现实时聊天功能。PHP 可以通过 Ratchet 库实现 WebSo…

php实现的分页

php实现的分页

PHP 实现分页的方法 基本分页逻辑 分页的核心在于计算总页数、当前页码以及数据偏移量。假设每页显示 10 条数据: $current_page = isset($_GET['page']) ? (…

php无限分类的实现

php无限分类的实现

PHP无限分类的实现 无限分类是一种常见的树形结构数据组织方式,适用于商品分类、菜单管理、地区选择等场景。以下是几种实现方法: 递归实现法 递归是最直观的实现方式,通过函数自身调用来遍历子分类。数据…

php实现注册登录

php实现注册登录

PHP 注册功能实现 创建数据库表(以 MySQL 为例) CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, usern…