Niedawno otrzymałem małe zadanie od znanego programisty, aby stworzyć funkcję dla jego strony, która pokazywałaby, ilu użytkowników jest obecnie na stronie, interesujące jest, aby nie korzystać z bazy danych i aby funkcja była jak najbardziej zwarta. Postanowiłem użyć do tego zwykłych plików tekstowych, które nie będą zawierać niczego, dlatego nie zajmą miejsca.
Logika skryptu:
1. Odwiedzający wchodzi na stronę, jeśli jest nowy, tworzony jest plik txt z jego danymi. Jeśli jest ostatnim gościem, aktualizowana jest tylko najnowsza data modyfikacji jego pliku.
2. Skrypt odbiera dane z pełnej ścieżki wszystkich plików tekstowych do tablicy. Sprawdzamy, kiedy dokonano ostatnich modyfikacji w pliku tekstowym.
3. Jeśli suma ostatniej modyfikacji w pliku tekstowym (w sekundach unix) + określony okres ważności pliku w sekundach, jest mniejsza niż bieżący czas w sekundach, użytkownik opuścił witrynę lub nie zaktualizował strony w przeglądarce.
Plusy skryptu:
- Kompaktowa funkcja z wyraźnie skomentowanym kodem i logicznie nazwanymi zmiennymi.
- Dwa rodzaje kont użytkowników: 1 - Rozważ tylko IP. 2 - Weź pod uwagę adres IP i przeglądarkę
- niezależne od bazy danych
- Nie wymaga żadnej konfiguracji z PHP, wymaga tylko 777 praw do folderu z plikami.
Wady skryptów:
- Błąd odmowy uprawnień może wystąpić, jeśli folder z plikami tekstowymi nie ma 777 uprawnień, ale jest to bardziej prawdopodobny błąd po stronie użytkownika, a nie skryptu.
- Nie pokazuje aktualnej liczby osób na stronie, pokazuje, ilu użytkowników odwiedziło witrynę w określonym przedziale czasu.
- Każdy skrypt może być napisany lepiej, tak wielu programistów i stylów programowania.
Zobaczmy kod naszej funkcji.
Nie zapomnij podać uprawnień do folderu online_count 777
<? php function onlineCount () {// Czas trwania pliku użytkownika (w sekundach) $ RelevanceOfTheFile = 60; // Ścieżka do folderu, w którym znajdują się pliki odwiedzających $ VisistersFileDir = $ _SERVER ['DOCUMENT_ROOT']. '/ Online_count /'; // Rozważ nazwę pliku i przeglądarkę 1 - tak, 0 - nie $ AddBrowserAtFileName = 0; // Zapisz nowy plik odwiedzającemu $ VisiterFileName = $ _SERVER ['REMOTE_ADDR']; if ($ AddBrowserAtFileName) {$ VisiterFileName. = $ _SERVER ['HTTP_USER_AGENT']; } $ VisiterFileName = $ VisistersFileDir.md5 ($ VisiterFileName). '. Txt'; $ OpenFile = fopen ($ VisiterFileName, "a +"); // Pełna ścieżka do wszystkich plików txt $ VisitersFiles = glob ($ VisistersFileDir. '*. Txt'); // Sprawdź liczbę odwiedzających dla ostatnich $ RelevanceOfTheFile sekund if (! Count ($ VisitersFiles)) {return 0; } else {$ ActiveVisiters = 0; foreach ($ VisitersFiles jako $ File) {$ AgeFile = czas_pliku ($ File); if (($ AgeFile + $ RelevanceOfTheFile)> = time ()) {$ ActiveVisiters + = 1; $ UpdateTheDateOfLastEdit = fopen ($ File, 'a +'); @fclose ($ UpdateTheDateOfLastEdit); } else {@fclose ($ OpenFile); $ DeleteOldFile = unlink ($ File); }} zwraca $ ActiveVisiters; }} $ OnlineCount = onlineCount (); echo „Odwiedzający witrynę w ostatniej chwili:”. $ OnlineCount; ?> Wynik skryptu: Odwiedzający witrynę w ostatniej chwili: 1 Pobierz archiwum z przykładem
Wszystkie pytania są napisane w komentarzach.