PHP怎样监听视频播放结束事件_PHP监听播放结束事件办法【监听】

PHP无法监听视频播放结束事件,因其是服务端语言,无浏览器DOM上下文;须由JavaScript监听video的ended事件并主动通过fetch向PHP接口上报,PHP端需校验参数、防重、预处理入库。

php怎样监听视频播放结束事件_php监听播放结束事件办法【监听】

PHP 无法直接监听视频播放结束事件——这是前端行为,必须由 JavaScript 在浏览器中完成。

为什么 PHP 做不到?

PHP 是服务端语言,视频在用户浏览器里播放时,PHP 进程早已响应完毕、连接关闭。播放结束这个事件根本不会自动传回服务器,除非你主动发起请求。

  • video 元素的 ended 事件只在 DOM 中触发,PHP 完全感知不到
  • 试图用 file_get_contents()fopen() 检查视频文件是否“播完了”是无效思路——服务端没有播放上下文
  • 所有“监听播放结束”的需求,本质是「前端检测 + 主动上报」

JavaScript 怎么监听并通知 PHP?

在页面中给 绑定 ended 事件,用 fetchXMLHttpRequest 向 PHP 接口发请求。


  • track_end.php 需要自己编写,接收 POST 数据并写入数据库或触发后续逻辑
  • 注意加防重:用户可能刷新页面或重复触发,建议在 PHP 端校验 video_id + user_id + timestamp 是否已记录
  • 移动端 Safari 对 ended 事件支持稳定,但部分安卓 WebView 可能延迟或丢失,可加 timeupdate + duration - currentTime 辅助判断

PHP 接口怎么安全接收这个事件?

track_end.php 不只是 echo “ok”,得做基础防护和业务落地:

HeyGen

HeyGen

HeyGen是一个AI虚拟数字人生成平台,可以根据用户提供的内容,快速生成高质量的虚拟发言人视频,支持数字化身、文本转视频和视频翻译。

下载

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

// 验证必要参数
if (!isset($_POST['video_id'], $_POST['user_id'])) {
http_response_code(400);
exit;
}

$video_id = (int)$_POST['video_id']; $user_id = (int)$_POST['user_id'];

// 可选:验证 Referer 或加简单 token(如前端带时间戳+md5签名) // 防止被批量刷接口

// 写入数据库示例(PDO) try { $pdo = new PDO("mysql:host=localhost;dbname=test", $user, $pass); $stmt = $pdo->prepare("INSERT INTO video_play_log (video_id, user_id, ended_at) VALUES (?, ?, NOW())"); $stmt->execute([$video_id, $user_id]); } catch (PDOException $e) { error_log($e->getMessage()); } ?>

  • 不要依赖 $_SESSION 判断登录态——ended 事件可能在会话过期后触发,需前端传 user_id 或 token
  • 避免直接拼接 SQL,务必用预处理语句
  • 不返回敏感数据,HTTP 状态码 204(No Content)比 200 更合适

真正的难点不在“怎么监听”,而在于如何让前端上报可靠、服务端去重严谨、整个链路可追溯——尤其是用户中途关闭页面、网络中断、或反复点击播放时,ended 事件未必能发出或抵达。

https://www.php.cn/faq/1988787.html

发表回复

Your email address will not be published. Required fields are marked *