[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

Popular

[C++] Jak obliczyć pole i obwód trapezu?

[HTML] Jak wstawić obrazek?

[JavaScript|Node.js] Generowanie kodów QR w Node.js z użyciem biblioteki qrcode