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

实现视频上传进度显示,关键在于前端实时获取上传状态,后端配合提供进度信息。PHP本身无法直接监控文件上传过程,但结合PECL扩展uploadprogress或APC,再搭配Ajax技术,就能实现平滑的上传进度条。
uploadprogress是专为PHP设计的上传进度追踪扩展,使用前需确认已安装并启用:
前端需要一个表单和用于显示进度的DOM元素:
<form id="uploadForm" action="upload.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="UPLOAD_IDENTIFIER" value="123456789" />
<input type="file" name="video" />
<input type="submit" value="上传" />
</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>upload.php负责接收文件,progress.php则返回当前上传进度:
立即学习“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]);
}
?>注意:隐藏字段UPLOAD_IDENTIFIER的值必须与uploadprogress监测的KEY一致,通常由前端生成唯一ID并同步传递。
若无法安装uploadprogress,APC(Alternative PHP Cache)也支持上传进度,需开启apc.rfc1867 = 1,并使用apc_fetch获取进度数据。流程类似,只是函数调用不同。
基本上就这些。核心是扩展支持+Ajax轮询,只要环境配置正确,视频大文件上传也能有良好用户体验。
以上就是PHP实现视频上传进度显示_PHP视频上传进度显示攻略的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号