[PHP] Aktualna liczba osób na stronie, czyli licznik online
Piszemy licznik online na stronę
// Path do pliku, w którym przechowywane są adresy IP
$file = "ip_addresses.txt";
// Czas trwania sesji w sekundach (5 minut = 300 sekund)
$sessionDuration = 300;
// Pobieramy aktualny adres IP użytkownika
$ipAddress = $_SERVER['REMOTE_ADDR'];
// Sprawdzamy, czy plik istnieje
if (file_exists($file)) {
// Otwieramy plik w trybie odczytu i zapisu
$handle = fopen($file, "r+");
// Blokujemy plik, aby uniknąć konfliktów z innymi użytkownikami
flock($handle, LOCK_EX);
// Odczytujemy zawartość pliku
$ipAddresses = unserialize(fread($handle, filesize($file)));
// Dodajemy aktualny adres IP do tablicy adresów IP
$ipAddresses[$ipAddress] = time() + $sessionDuration;
// Przesuwamy wskaźnik pliku na początek
rewind($handle);
// Zapisujemy zaktualizowane adresy IP do pliku
fwrite($handle, serialize($ipAddresses));
// Zwalniamy blokadę pliku
flock($handle, LOCK_UN);
// Zamykamy plik
fclose($handle);
} else {
// Jeśli plik nie istnieje, tworzymy go i ustawiamy tablicę adresów IP z aktualnym adresem IP
$ipAddresses = array($ipAddress => time() + $sessionDuration);
file_put_contents($file, serialize($ipAddresses));
}
// Sprawdzamy, czy adres IP jest nadal aktywny
if (isset($ipAddresses[$ipAddress]) && $ipAddresses[$ipAddress] > time()) {
// Wyświetlamy liczbę osób przeglądających stronę
echo "Aktualnie na stronie jest: " . count($ipAddresses) . " osób.";
} else {
// Jeśli adres IP wygasł, usuwamy go z tablicy adresów IP
unset($ipAddresses[$ipAddress]);
// Otwieramy plik w trybie odczytu i zapisu
$handle = fopen($file, "r+");
// Blokujemy plik, aby uniknąć konfliktów z innymi użytkownikami
flock($handle, LOCK_EX);
// Przesuwamy wskaźnik pliku na początek
rewind($handle);
// Zapisujemy zaktualizowane adresy IP do pliku
fwrite($handle, serialize($ipAddresses));
// Zwalniamy blokadę pliku
flock($handle, LOCK_UN);
// Zamykamy plik
fclose($handle);
// Wyświetlamy liczbę osób przeglądających stronę
echo "Aktualnie na stronie jest: " . count($ipAddresses) . " osób.";
}
Komentarze
Prześlij komentarz
Dzięki za komentarz!