当前位置:首页 > 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);

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

相关文章

h5怎么实现上传视频

h5怎么实现上传视频

使用HTML5实现视频上传 HTML5提供了<input type="file">元素用于文件上传,结合<video>标签可以实现视频上传和预览功能。 <input t…

php实现的进度条

php实现的进度条

PHP 实现的进度条方法 在 PHP 中实现进度条通常可以通过命令行脚本(CLI)或 Web 页面两种方式完成。以下是几种常见的实现方法: 命令行进度条 使用 PHP CLI 实现进度条,可以通过不…

vue实现语音上传

vue实现语音上传

实现语音上传功能 在Vue中实现语音上传功能需要结合浏览器的Web Audio API和文件上传逻辑。以下是一个完整的实现方案: 录音功能实现 安装依赖库recorder-core和wav编码器:…

vue实现列表批量上传

vue实现列表批量上传

批量上传列表的实现方法 前端部分(Vue.js) 使用<input type="file">元素配合multiple属性实现多文件选择 <template> <d…

vue实现上传头像显示

vue实现上传头像显示

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

vue实现拍摄视频上传

vue实现拍摄视频上传

Vue实现拍摄视频上传的方法 使用HTML5的<input type="file">和capture属性 在Vue模板中添加一个文件输入元素,通过capture属性指定使用摄像头拍摄视频:…