当前位置:首页 > 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队列的实现方式 PHP中实现队列功能可以通过多种方式,根据需求选择适合的方案: 使用数组实现基础队列 PHP数组本身支持队列操作,利用array_push和array_shift函数: $q…

php实现接口

php实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不实现具体功能。类可以实现一个或多个接口,并必须实现接口中定义的所有方法。 定义接口 接口使用 inter…

php怎么实现登录功能

php怎么实现登录功能

数据库准备 创建用户表存储登录信息,通常包括用户名、密码(需加密)等字段。示例SQL: CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY…

vue实现文件上传

vue实现文件上传

文件上传的基本实现 在Vue中实现文件上传通常需要结合HTML的<input type="file">元素和JavaScript的File对象处理。创建一个基本的文件上传组件: <…

php 实现评论

php 实现评论

实现 PHP 评论功能 数据库设计 创建数据库表存储评论数据,通常包含以下字段: id:评论唯一标识 user_id:用户ID content:评论内容 created_at:评论时间 parent…

php数据库实现

php数据库实现

PHP 连接 MySQL 数据库 使用 mysqli 扩展连接 MySQL 数据库: <?php $servername = "localhost"; $username = "usernam…