当前位置:首页 > PHP

php实现上传进度条

2026-01-28 19:53:02PHP

PHP 文件上传进度条实现方法

在PHP中实现文件上传进度条需要结合前端和后端技术,以下是一种常见的实现方案:

使用 session.upload_progress 功能

PHP 5.4+ 内置了上传进度跟踪功能,通过配置 php.ini 启用:

session.upload_progress.enabled = On
session.upload_progress.cleanup = On
session.upload_progress.prefix = "upload_progress_"
session.upload_progress.name = "PHP_SESSION_UPLOAD_PROGRESS"

前端HTML表单需要包含特殊字段:

<form action="upload.php" method="POST" enctype="multipart/form-data">
    <input type="hidden" name="<?php echo ini_get('session.upload_progress.name'); ?>" value="123">
    <input type="file" name="file1">
    <input type="submit">
</form>

后端PHP脚本获取进度:

$key = ini_get('session.upload_progress.prefix') . $_POST[ini_get('session.upload_progress.name')];
$progress = $_SESSION[$key];

前端AJAX轮询实现

创建一个进度检查接口:

// progress.php
session_start();
$key = ini_get('session.upload_progress.prefix') . $_GET['progress_key'];
if (isset($_SESSION[$key])) {
    $progress = $_SESSION[$key];
    echo json_encode([
        'received' => $progress['bytes_processed'],
        'total' => $progress['content_length']
    ]);
}

前端JavaScript代码:

function checkProgress(progressKey) {
    fetch(`progress.php?progress_key=${progressKey}`)
        .then(response => response.json())
        .then(data => {
            const percent = Math.round((data.received / data.total) * 100);
            updateProgressBar(percent);
            if (percent < 100) {
                setTimeout(() => checkProgress(progressKey), 500);
            }
        });
}

使用第三方库

对于更复杂的需求,可以考虑以下方案:

  • 使用jQuery插件如jQuery-File-Upload
  • 使用Dropzone.js等现代文件上传库
  • 使用Plupload等支持多运行时环境的库

注意事项

确保服务器配置允许大文件上传:

upload_max_filesize = 100M
post_max_size = 100M
max_execution_time = 300

现代浏览器支持XMLHttpRequest Level 2的进度事件,可以更高效地实现进度跟踪:

php实现上传进度条

xhr.upload.addEventListener('progress', function(e) {
    if (e.lengthComputable) {
        const percent = Math.round((e.loaded / e.total) * 100);
        // 更新进度条
    }
}, false);

标签: 进度条上传
分享给朋友:

相关文章

jquery上传

jquery上传

jQuery 文件上传的实现方法 jQuery 可以通过多种方式实现文件上传功能,以下介绍几种常见的方法: 使用原生表单和 AJAX 通过 HTML 表单结合 jQuery 的 AJAX 功能实现文…

vue上传视频实现

vue上传视频实现

使用 <input type="file"> 上传视频 创建文件选择控件,限制文件类型为视频格式(如 .mp4, .webm)。通过 @change 事件监听文件选择,获取 File 对象…

vue实现上传头像显示

vue实现上传头像显示

Vue 实现上传头像并显示 前端实现(Vue 3 + Element Plus) 模板部分 <template> <div class="avatar-upload">…

react实现录制视频上传

react实现录制视频上传

实现视频录制与上传的基本流程 使用React实现视频录制并上传需要结合浏览器提供的媒体API和HTTP上传功能。以下是关键步骤: 获取用户摄像头权限 使用navigator.mediaDevices…

vue实现水波球进度条

vue实现水波球进度条

Vue 实现水波球进度条 使用 SVG 和动态计算 在 Vue 中实现水波球进度条,可以通过 SVG 结合动态计算波浪效果。以下是一个基于 Vue 3 的实现方法: <template>…

vue上传视频实现

vue上传视频实现

Vue 上传视频实现 在 Vue 中实现视频上传功能,可以通过以下方法完成。以下步骤涵盖了从文件选择到上传至服务器的完整流程。 文件选择与预览 使用 <input type="file">…