当前位置:首页 > 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信息。

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;
    }

    // 处理文件上传
}

生成唯一文件名

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

$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实现文件上传

文件上传的基本实现 在PHP中实现文件上传需要使用$_FILES超全局数组处理上传的文件数据。表单必须设置enctype="multipart/form-data"属性,并采用POST方法提交。 创…

php实现websocket

php实现websocket

PHP 实现 WebSocket WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。PHP 可以通过多种方式实现 WebSocket 功能,以下是几种常见的方法: 使用 Ratc…

php实现注册

php实现注册

注册功能实现步骤 数据库准备 创建用户表,包含字段如id、username、password、email等。示例SQL: CREATE TABLE users ( id INT AUTO_…

php实现异步

php实现异步

PHP 实现异步的方法 PHP 本身是同步执行的脚本语言,但可以通过以下方法模拟异步操作或实现异步效果: 使用多进程(pcntl_fork) 通过 pcntl_fork 创建子进程实现异步,适用于…

h5实现文件上传

h5实现文件上传

实现文件上传的基本方法 使用HTML5的<input type="file">元素是最简单的文件上传方式。通过设置multiple属性可以实现多文件选择。 <input type…

php实现即时通讯

php实现即时通讯

PHP 实现即时通讯的方案 即时通讯(IM)可以通过多种方式实现,PHP 作为服务器端语言,通常需要结合前端技术(如 WebSocket、AJAX)或第三方服务来实现实时通信。以下是几种常见的实现方式…