Przejdź do treści

Licznik odwiedzin bez bazy danych

  • Przydatne narzędzia
  • poziom: początkujący
  • aktualizacja: 12 lipca 2026

Licznik odwiedzin to skrypt, od którego wielu webmasterów zaczynało przygodę z PHP. Ta wersja jest napisana porządnie: używa blokady pliku (flock), więc dwa równoczesne wejścia nie nadpiszą sobie nawzajem wyniku, a ciasteczko sprawia, że odświeżanie strony nie nabija licznika.

PHP 72 linii Pobierz .php
<?php
/**
 * Licznik odwiedzin bez bazy danych — skryptyPHP.com
 * Zapisz jako: licznik.php i dołącz na stronie przez require.
 * UWAGA: wywołuj PRZED wysłaniem jakiegokolwiek HTML (ustawia ciasteczko).
 */

/**
 * Zlicza odwiedziny i zwraca aktualny wynik.
 *
 * @param string|null $plik    ścieżka pliku licznika (domyślnie licznik.txt)
 * @param bool        $unikalne true = nie licz odświeżeń tego samego gościa
 *                              przez 24 godziny (na podstawie ciasteczka)
 */
function zlicz_odwiedziny(?string $plik = null, bool $unikalne = true): int
{
    $plik = $plik ?? __DIR__ . '/licznik.txt';

    // Czy tego gościa już dziś policzyliśmy?
    $nowaWizyta = !($unikalne && isset($_COOKIE['policzono']));

    // 'c+' — otwórz do odczytu i zapisu, utwórz jeśli nie istnieje
    $uchwyt = fopen($plik, 'c+');
    if ($uchwyt === false) {
        return 0; // brak praw zapisu — nie wysypuj strony
    }

    // Blokada wyłączna: inne wejścia poczekają ułamek sekundy,
    // zamiast nadpisywać sobie nawzajem wynik
    flock($uchwyt, LOCK_EX);

    $stan = (int) stream_get_contents($uchwyt);

    if ($nowaWizyta) {
        $stan++;
        ftruncate($uchwyt, 0);
        rewind($uchwyt);
        fwrite($uchwyt, (string) $stan);

        if ($unikalne) {
            setcookie('policzono', '1', [
                'expires'  => time() + 86400, // 24 godziny
                'path'     => '/',
                'samesite' => 'Lax',
            ]);
        }
    }

    flock($uchwyt, LOCK_UN);
    fclose($uchwyt);

    return $stan;
}

// ── PRZYKŁAD UŻYCIA ─────────────────────────────────────────
// Na początku strony (przed HTML!):
$odwiedziny = zlicz_odwiedziny();
?>
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<title>Moja strona</title>
</head>
<body>

<h1>Witaj na mojej stronie!</h1>

<p>Odwiedzin: <strong><?= number_format($odwiedziny, 0, ',', ' ') ?></strong></p>

</body>
</html>

Jak użyć tego skryptu

  1. Zapisz kod jako licznik.php lub skopiuj funkcję do swojej strony.
  2. Wywołaj zlicz_odwiedziny() na samym początku pliku — przed wysłaniem HTML, bo funkcja ustawia ciasteczko.
  3. Plik licznik.txt utworzy się sam; upewnij się tylko, że PHP może zapisywać w katalogu skryptu.
  4. Aby liczyć każde odświeżenie strony (stary styl liczników), wywołaj zlicz_odwiedziny(null, false).

Warto wiedzieć

  • Blokada flock(LOCK_EX) to najważniejszy element — bez niej przy dwóch równoczesnych wejściach oba procesy odczytają tę samą wartość i jedno wejście „zniknie".
  • Ciasteczko odsiewa tylko zwykłych gości — nie jest to statystyka odporna na czyszczenie ciasteczek czy tryb prywatny. Do poważnych analiz użyj np. samodzielnie hostowanego Matomo.
  • Jeśli chcesz chronić plik licznika przed podejrzeniem, trzymaj go poza katalogiem publicznym albo zablokuj dostęp w .htaccess.
#licznik #flock #pliki #cookies #statystyki

Podobne skrypty