登录
首页 >  文章 >  php教程

PHP上传进度显示实现方法

时间:2026-01-07 22:34:21 364浏览 收藏

偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍《PHP视频上传进度显示教程》,这篇文章主要会讲到等等知识点,不知道大家对其都有多少了解,下面我们就一起来看一吧!当然,非常希望大家能多多评论,给出合理的建议,我们一起学习,一起进步!

实现视频上传进度显示需前端通过Ajax轮询获取后端进度信息,结合PHP的uploadprogress扩展或APC实现;具体流程为:前端表单提交时生成唯一标识,JavaScript监听上传事件并定时请求progress.php获取实时进度,后端利用uploadprogress_get_info()返回已处理字节数与总字节数之比计算百分比,最终在页面动态更新进度条,确保大文件上传过程可视化。

PHP实现视频上传进度显示_PHP视频上传进度显示攻略

实现视频上传进度显示,关键在于前端实时获取上传状态,后端配合提供进度信息。PHP本身无法直接监控文件上传过程,但结合PECL扩展uploadprogressAPC,再搭配Ajax技术,就能实现平滑的上传进度条。

启用uploadprogress扩展

uploadprogress是专为PHP设计的上传进度追踪扩展,使用前需确认已安装并启用:

  • 通过phpinfo()检查是否已加载uploadprogress模块
  • 若未安装,可通过pecl install uploadprogress命令安装
  • 在php.ini中添加extension=uploadprogress.so(Linux)或extension=php_uploadprogress.dll(Windows)
  • 确保uploadprogress.enabled = On

HTML与JavaScript实现进度条

前端需要一个表单和用于显示进度的DOM元素:

<form id="uploadForm" action="upload.php" method="POST" enctype="multipart/form-data">
  &lt;input type=&quot;hidden&quot; name=&quot;UPLOAD_IDENTIFIER&quot; value=&quot;123456789&quot; /&gt;
  &lt;input type=&quot;file&quot; name=&quot;video&quot; /&gt;
  &lt;input type=&quot;submit&quot; value=&quot;上传&quot; /&gt;
</form>
<div id="progress">进度:0%</div>
<script>
const form = document.getElementById('uploadForm');
const progressDiv = document.getElementById('progress');
<p>form.addEventListener('submit', function(e) {
e.preventDefault();
const formData = new FormData(form);
const xhr = new XMLHttpRequest();</p><p>// 获取唯一标识符
const uid = form['UPLOAD_IDENTIFIER'].value;</p><p>// 监听上传进度
xhr.upload.onprogress = function(e) {
if (e.lengthComputable) {
const percent = Math.round((e.loaded / e.total) * 100);
progressDiv.textContent = '进度:' + percent + '%';
}
};</p><p>// 轮询获取服务端进度
const interval = setInterval(() => {
fetch('progress.php?uid=' + uid)
.then(res => res.json())
.then(data => {
if (data.progress <= 100) {
progressDiv.textContent = '进度:' + data.progress + '%';
}
if (data.done) clearInterval(interval);
});
}, 500);</p><p>xhr.open('POST', 'upload.php');
xhr.send(formData);
});
</script></p>

PHP后端处理上传与进度查询

upload.php负责接收文件,progress.php则返回当前上传进度:

upload.php

<?php
if ($_FILES['video']) {
  $tmp_name = $_FILES['video']['tmp_name'];
  $name = $_FILES['video']['name'];
  move_uploaded_file($tmp_name, 'videos/' . $name);
  echo "上传完成";
}
?>

progress.php

<?php
session_start();
$uid = $_GET['uid'];
$info = uploadprogress_get_info($uid);
<p>if ($info) {
echo json_encode([
'done' => $info['bytes_processed'] == $info['bytes_total'],
'progress' => ($info['bytes_processed'] / $info['bytes_total']) * 100
]);
} else {
echo json_encode(['done' => false, 'progress' => 0]);
}
?></p>

注意:隐藏字段UPLOAD_IDENTIFIER的值必须与uploadprogress监测的KEY一致,通常由前端生成唯一ID并同步传递。

替代方案:使用APC

若无法安装uploadprogress,APC(Alternative PHP Cache)也支持上传进度,需开启apc.rfc1867 = 1,并使用apc_fetch获取进度数据。流程类似,只是函数调用不同。

基本上就这些。核心是扩展支持+Ajax轮询,只要环境配置正确,视频大文件上传也能有良好用户体验。

今天关于《PHP上传进度显示实现方法》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

前往漫画官网入口并下载 ➜
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>