当前位置:首页 > 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超全局数组接收文件,注意多文件会被组织为三维数组结构:

php实现多文件上传

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("文件大小超过限制");
}

错误处理机制

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

php实现多文件上传

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;

完整示例代码

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

$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实现文件下载功能,可以采用多种方式,以下是几种常见的实现方法: 使用header()函数强制下载 设置HTTP头信息,强制浏览器下载文件而非直接打开:…

php实现定时任务

php实现定时任务

PHP 实现定时任务的几种方法 在 PHP 中实现定时任务可以通过多种方式完成,具体选择取决于项目需求和服务器环境。以下是常见的实现方法: 使用 Cron 任务 Cron 是 Linux 系统中常用…

php实现表单

php实现表单

PHP 表单基础实现 创建一个简单的 PHP 表单需要 HTML 表单结构和 PHP 处理脚本。以下是一个完整的示例: HTML 表单部分 (form.html) <form actio…

php实现文件的下载

php实现文件的下载

PHP 实现文件下载的方法 在 PHP 中实现文件下载功能通常需要设置正确的 HTTP 头信息,并输出文件内容。以下是几种常见的实现方式: 使用 header() 函数强制下载 通过设置 Conte…

php实现分类

php实现分类

PHP实现分类的方法 数据库设计 创建分类表时,通常需要包含id、名称、父级id等字段。父级id用于实现多级分类结构。 CREATE TABLE categories ( id INT AU…

php实现的分页

php实现的分页

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