当前位置:首页 > PHP

php 实现上传进度

2026-02-16 13:33:34PHP

PHP 实现上传进度的方法

使用 session.upload_progress 功能

PHP 提供了一个内置功能 session.upload_progress,可以在文件上传时跟踪进度。需要在 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 页面,表单中必须包含一个隐藏字段,其名称与 session.upload_progress.name 配置的值相同:

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

在另一个脚本中(如 AJAX 请求),可以通过检查 $_SESSION 来获取上传进度:

php 实现上传进度

session_start();
$key = ini_get('session.upload_progress.prefix') . 'file_upload';
if (isset($_SESSION[$key])) {
    $progress = $_SESSION[$key];
    $percentage = ($progress['bytes_processed'] / $progress['content_length']) * 100;
    echo json_encode(['progress' => $percentage]);
}

使用 AJAX 轮询进度

前端可以通过 AJAX 定期轮询服务器以获取上传进度。以下是示例代码:

function checkProgress() {
    $.get('progress.php', function(data) {
        if (data.progress < 100) {
            setTimeout(checkProgress, 500); // 每 0.5 秒检查一次
        }
        $('#progress-bar').width(data.progress + '%');
    });
}

使用第三方库

对于更复杂的上传进度跟踪,可以考虑使用第三方库,如 pluploadDropzone.js。这些库提供了更丰富的上传进度显示功能,并且支持分块上传。

php 实现上传进度

var uploader = new plupload.Uploader({
    browse_button: 'browse-button',
    url: 'upload.php'
});

uploader.init();
uploader.bind('UploadProgress', function(up, file) {
    console.log(file.percent + '% uploaded');
});

使用 uploadprogress PECL 扩展

安装 uploadprogress 扩展后,可以使用其提供的函数跟踪上传进度:

if (function_exists('uploadprogress_get_info')) {
    $info = uploadprogress_get_info($_POST['upload_id']);
    $percentage = ($info['bytes_uploaded'] / $info['bytes_total']) * 100;
    echo $percentage;
}

确保在表单中包含一个唯一的 upload_id

<input type="hidden" name="UPLOAD_IDENTIFIER" value="<?php echo uniqid(); ?>" />

以上方法可以根据具体需求选择适合的方案来实现文件上传进度跟踪。

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

相关文章

jquery 上传

jquery 上传

jQuery 文件上传方法 使用 jQuery 实现文件上传可以通过多种方式完成,以下是常见的几种方法: 使用原生表单和 AJAX 创建一个包含文件输入的表单,并通过 jQuery 的 AJAX…

jquery上传

jquery上传

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

vue实现分段上传

vue实现分段上传

实现分段上传的基本思路 分段上传(分片上传)是将大文件分割成多个小块分别上传,最后在服务器合并的技术。这种方式能提高上传稳定性、支持断点续传,并减轻服务器压力。 前端实现步骤 安装依赖 需要axi…

vue上传视频实现

vue上传视频实现

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

php实现视频上传

php实现视频上传

视频上传功能实现 使用PHP实现视频上传功能需要处理文件接收、验证、存储等步骤。以下是具体实现方法: 创建HTML表单 前端表单需要设置enctype="multipart/form-data"…

vue实现环形进度

vue实现环形进度

Vue 实现环形进度条的方法 使用 SVG 和 CSS 实现 在 Vue 中创建一个环形进度条可以通过 SVG 和 CSS 结合实现。以下是一个简单的实现方式: <template>…