|
我问了整整两天,才给我写出来,不能说完全没用吧
只能说鸡扒猫用没有
距离真正的可用感觉差太远,我整理的训练和提示词都三千多字了塔玛的纯纸张
index.php
<?php
// index.php
session_start();
// 定义心跳包文件和超时时间(以分钟为单位)
$heartbeatFile = 'online_users.txt';
$timeout = 60; // 用户超时时间(60秒)
// 读取在线用户文件
if (file_exists($heartbeatFile)) {
$content = file_get_contents($heartbeatFile);
$lines = explode("\n", $content);
} else {
$lines = [];
}
// 统计在线用户数
$currentTime = time();
$onlineCount = 0;
foreach ($lines as $line) {
if ($line) {
list($id, $time) = explode(':', $line);
if ($currentTime - $time < $timeout) {
$onlineCount++;
}
}
}
// 如果是新用户,则添加到在线用户列表中
$sessionId = session_id();
if (!in_array($sessionId . ':' . $currentTime, $lines)) {
$lines[] = $sessionId . ':' . $currentTime;
file_put_contents($heartbeatFile, implode("\n", $lines));
$onlineCount++; // 增加新用户的计数
}
// 显示在线用户数
echo "在线用户数: " . $onlineCount;
?>
心跳处理 heartbeat.php
<?php
// 定义心跳包文件和超时时间(以秒为单位)
$heartbeatFile = 'online_users.txt';
$timeout = 60; // 用户超时时间(60秒)
// 读取在线用户文件
if (file_exists($heartbeatFile)) {
$content = file_get_contents($heartbeatFile);
$lines = explode("\n", $content);
} else {
$lines = [];
}
// 检查是否收到了心跳请求
if (isset($_GET['heartbeat'])) {
// 获取会话ID
$sessionId = session_id();
// 获取当前时间戳
$timestamp = time();
// 更新用户的最后活动时间
$updated = false;
foreach ($lines as &$line) {
list($id, $time) = explode(':', $line);
if ($id === $sessionId) {
$line = $sessionId . ':' . $timestamp;
$updated = true;
break;
}
}
unset($line);
// 如果用户不在线,则添加新的记录
if (!$updated) {
$lines[] = $sessionId . ':' . $timestamp;
}
// 删除超时的用户
$lines = array_filter($lines, function ($line) use ($timeout, $timestamp) {
list($id, $time) = explode(':', $line);
return $timestamp - $time < $timeout;
});
// 将更新后的内容写回文件
file_put_contents($heartbeatFile, implode("\n", $lines));
}
?>
|
|