当前位置:首页 > PHP

php实现多文件上传

2026-02-13 19:37:14PHP

多文件上传的基本实现

使用HTML表单和PHP处理文件上传是实现多文件上传的基础方法。HTML表单需要设置enctype="multipart/form-data"属性,并包含multiple属性的文件输入字段。

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

PHP端通过$_FILES超全局数组接收上传的文件。每个文件包含nametypetmp_nameerrorsize信息。

php实现多文件上传

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $uploadDir = 'uploads/';
    foreach ($_FILES['files']['tmp_name'] as $key => $tmpName) {
        $fileName = basename($_FILES['files']['name'][$key]);
        $targetPath = $uploadDir . $fileName;
        move_uploaded_file($tmpName, $targetPath);
    }
}

文件验证与安全性处理

确保上传文件的安全性至关重要。验证文件类型、大小和检查上传错误是必要的步骤。

$allowedTypes = ['image/jpeg', 'image/png', 'application/pdf'];
$maxSize = 2 * 1024 * 1024; // 2MB

foreach ($_FILES['files']['tmp_name'] as $key => $tmpName) {
    $fileType = $_FILES['files']['type'][$key];
    $fileSize = $_FILES['files']['size'][$key];
    $error = $_FILES['files']['error'][$key];

    if ($error !== UPLOAD_ERR_OK) {
        continue;
    }

    if (!in_array($fileType, $allowedTypes) || $fileSize > $maxSize) {
        continue;
    }

    // 处理文件上传
}

生成唯一文件名

为避免文件名冲突和安全问题,可以为上传的文件生成唯一名称。

php实现多文件上传

$extension = pathinfo($_FILES['files']['name'][$key], PATHINFO_EXTENSION);
$uniqueName = uniqid() . '.' . $extension;
$targetPath = $uploadDir . $uniqueName;

错误处理与用户反馈

提供清晰的错误信息有助于用户理解上传过程中出现的问题。

$uploadErrors = [
    UPLOAD_ERR_INI_SIZE => 'File exceeds upload_max_filesize directive in php.ini',
    UPLOAD_ERR_FORM_SIZE => 'File exceeds MAX_FILE_SIZE directive in HTML form',
    UPLOAD_ERR_PARTIAL => 'File was only partially uploaded',
    UPLOAD_ERR_NO_FILE => 'No file was uploaded',
    UPLOAD_ERR_NO_TMP_DIR => 'Missing temporary folder',
    UPLOAD_ERR_CANT_WRITE => 'Failed to write file to disk',
    UPLOAD_ERR_EXTENSION => 'A PHP extension stopped the file upload'
];

if ($error !== UPLOAD_ERR_OK) {
    echo $uploadErrors[$error];
    continue;
}

批量上传进度显示

对于大量文件上传,显示上传进度可以改善用户体验。

session_start();
$_SESSION['upload_progress'] = [
    'total' => count($_FILES['files']['name']),
    'current' => 0
];

foreach ($_FILES['files']['tmp_name'] as $key => $tmpName) {
    // 处理上传
    $_SESSION['upload_progress']['current']++;
}

前端可以通过AJAX定期查询$_SESSION['upload_progress']来更新进度条。

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

相关文章

php实现增删改查

php实现增删改查

以下是在PHP中实现增删改查(CRUD)操作的详细方法,以MySQL数据库为例: 数据库连接配置 创建config.php文件存储数据库连接信息: <?php $host = 'localh…

php 路由实现

php 路由实现

PHP 路由实现方法 在 PHP 中实现路由功能有多种方式,以下是几种常见的实现方法: 使用原生 PHP 实现 通过解析 URL 并匹配对应的控制器和动作: $request = $_SERVER…

php验证码的实现

php验证码的实现

PHP 验证码实现方法 使用 GD 库生成基础验证码 创建画布并生成随机字符串作为验证码内容: session_start(); $width = 120; $height = 40; $image…

php队列的实现

php队列的实现

PHP队列的实现方式 PHP中实现队列功能可以通过多种方式,根据需求选择适合的方案: 使用数组实现基础队列 PHP数组本身支持队列操作,利用array_push和array_shift函数: $q…

php实现定时

php实现定时

PHP 实现定时任务的方法 PHP 本身是脚本语言,通常需要借助外部工具或框架实现定时任务。以下是几种常见方法: 使用 Cron 任务 Linux 系统自带的 Cron 是常用的定时任务工具。通过编…

无限分类实现 php

无限分类实现 php

无限分类的实现方法 无限分类通常用于构建多层级结构的数据,如商品分类、部门架构等。以下是几种常见的实现方式: 邻接列表模式(Adjacency List) 邻接列表是最简单的实现方式,通过在每个记录…