Skocz do zawartości

Licznik odsłon strony


Gość

Rekomendowane odpowiedzi

Ma ktoś może pod ręką mały skrypt zliczający przeładowania strony? Bez żadnych zabezpieczeń antycośtam, po prostu zliczenie każdego przeładowania podstrony poprzez dopisanie +1 w pliku .txt.

Z góry dziękuję :D

Odnośnik do komentarza
Udostępnij na innych stronach

Szczyt twojego lenistwa nie zna granic :D

Wpisz w google "fopen licznik odsłon" i masz tekstowe

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

<?php
if (file_exists('licznik.txt')) 
  $dane=file('licznik.txt');
else $dane=array(0);

$dane[0]++;

$plik=fopen('licznik.txt','w');
flock($plik,2);
fputs($plik,$dane[0]);
flock($plik,3);
fclose($plik);

echo $dane[0];
?>

Da się to jakoś uprościć?

Edycja:

Póki co uprościłem do:

<?php
$dane=file('licznik.txt');

$dane[0]++;

$plik=fopen('licznik.txt','w');
flock($plik,2);
fputs($plik,$dane[0]);
flock($plik,3);
fclose($plik);

echo $dane[0];
?>

Coś jeszcze zoptymalizować można?

Odnośnik do komentarza
Udostępnij na innych stronach

M-naw - nie wiem czy wiesz, ale bardziej zoptymalizowany kod szybciej się wykonuje i zabiera mniej cennych zasobow (będzie się on wykonywał parenascie tysięcy razy dziennie).

Mela - dzięki, sprawdzę kod po szkole ;-)

Odnośnik do komentarza
Udostępnij na innych stronach

To, że kod ma kilka linijek mniej wcale nie znaczy, że będzie bardziej zoptymalizowany pod względem jego wydajności od tego dłuższego. Wszystko zależy od zastosowanych funkcji i logiki w kodzie.

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Prawdopodobnie masz dużo wejść na stronę w krótkim okresie czasu (ilość wejść dziennie niewiele mówi) i występują race conditions, tzn. masz 2 procesy (pogrubione to wskaźnik instrukcji która się wykonuje):

-------------

PROC 1:

$dane=file('licznik.txt');

$dane[0]++;

$plik=fopen('licznik.txt','w');

flock($plik,2);

fputs($plik,$dane[0]);

flock($plik,3);

fclose($plik);

echo $dane[0];

-------------

PROC 2:

$dane=file('licznik.txt');

$dane[0]++;

$plik=fopen('licznik.txt','w');

flock($plik,2);

fputs($plik,$dane[0]);

flock($plik,3);

fclose($plik);

echo $dane[0];

Teraz przypuśćmy, że wykona się instrukcja $plik=fopen('licznik.txt','w'); i wykonywanie procesu PROC2 zostaje przerwane (minął czas procesora przydzielony dla PROC2). Teraz wykonuje się proc1 $dane=file('licznik.txt');. I co się teraz stanie? PROC1 odczyta pusty plik (bo nie zdążyło jeszcze wykonać się flock), zwiększy wartość o 1 (czyli wartość = 1) i go zapisze bo ten flock tak na prawdę nic nie daje (JEDYNA atomowa operacja na plikach w PHP to rename, w windows nawet rename nie jest atomowe!)

Akurat fopen('...', 'w') jest najgorsze :) Można spróbować z trybem A/fseek albo W+ - działa lepiej ale i tak licznik będzie się zerował. Najlepsza metoda - baza danych i tabela w pamięci.

Jak to obejść:

odczytać plik, zwiększyć zawartość o 1, ZAPISAĆ zwiększoną wartość pod nową LOSOWĄ nazwą i zrobić rename pliku z losową nazwą na plik z wartością licznika. W takim wypadku wszystko będzie działać ok. Ja tak robię cache na plikach i nie ma problemów zwracania pustej zawartości przy dużym ruchu. Pewnie to niezbyt wydajne jeśli chodzi o licznik ale przynajmniej nie będzie się zerował. Problem będzie taki, że nie każde wejście zliczy (chociaż opuści mało - również ze względu na RC)

Można też wykorzystać fopen 'A', dodawać znak do pliku i wyświetlać jego długość. Również będzie odporny na zerowanie, chociaż może się wydawać, że to idiotyzm ale tak chyba na plikach będzie najlepiej chociaż tego już nie testowałem ;) Na plikach zawsze był problem albo z wydajnością albo z tym, że to nie działało poprawnie na witrynach z dużą ilością odwiedzin.

Wstaw sobie jakiś licznik ze strony jeśli nie możesz wykorzystać bazy.

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności