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

看不見的法師
发布: 2025-10-07 18:21:02
原创
162人浏览过
实现视频上传进度显示需前端通过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">
  <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>
登录后复制

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

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

立即学习PHP免费学习笔记(深入)”;

upload.php

百度·度咔剪辑
百度·度咔剪辑

度咔剪辑,百度旗下独立视频剪辑App

百度·度咔剪辑 3
查看详情 百度·度咔剪辑
<?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并同步传递。

替代方案:使用APC

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

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

以上就是PHP实现视频上传进度显示_PHP视频上传进度显示攻略的详细内容,更多请关注php中文网其它相关文章!

热门游戏推荐
热门游戏推荐

最近有什么好玩的游戏?最近哪些游戏比较好玩?这里为大家带来热门游戏合集,汇聚了最新最好玩的高分爆款游戏,还在为不知道玩什么游戏而烦恼的玩家,快来保存下载体验吧!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号