Показать сообщение отдельно
  #16 (permalink)  
Старый 09.01.2020, 04:32
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

DenisUfa,

index.html (или index.php)
<p id="counter">
	<span style="font-size:15px;color:#A9A9A9;padding-left:15px;">сейчас на сайте: <b id="counter-number"><?php include('counter.php'); ?></b></span>
</p>
<script>

(function online() {
	fetch("/counter.php").then(async response => {
		document.querySelector("#counter-number").textContent = await response.text();
	}).finally(() => {
		setTimeout(online, 5 * 1000);
	});
})();

</script>


counter.php
<?php

$onlineDataFileName = 'online.dat';
$ip = $_SERVER['REMOTE_ADDR'];
$time = time();
$timeout = 5 + 5;

$data = @file_get_contents($onlineDataFileName);
$visitors = $data === false ? [] : unserialize($data);

$visitors = array_filter($visitors, function ($visitor) use ($time, $timeout, $ip) {
    return $visitor['time'] > $time - $timeout && $visitor['ip'] !== $ip;
});

$visitors[] = [
    'ip' => $ip,
    'time' => $time
];

file_put_contents($onlineDataFileName, serialize($visitors), LOCK_EX);

echo count($visitors);


Перед использованием вам нужно удалить файл online.dat.

Я не понимаю, почему нельзя было использовать встроенные функции и сериализацию.

Сообщение от laimas
Это для кого, если речь об обычном счетчике?
Я — не специалист по PHP, в моём примере (который ты только что увидел) что-то не так?

Сообщение от Poznakomlus
количество пользователей на сайте вычисляется по значению открытых сессии, если таковы имеются,
число вычисляется не точно, так как пользователь мог отключиться, у него пропал интернет
Если timeout и на сервере и на клиенте одинаковый, то, поскольку идёт постоянный опрос сервера, кол-во онлайн пользователей будет указано с точностью до того отрезка времени!

Последний раз редактировалось Malleys, 09.01.2020 в 04:50.
Ответить с цитированием