No dobrze, czyli chcesz zastosować prostą, statyczną metodę logowania czasu aktywności użytkownika.
Będziesz potrzebował napisać dwie procedury:
-
będzie zapisywała identyfikator użytkownika + czas bieżący do pliku z danymi, ale musi ona uwzględniać istnienie w pliku tego samego identyfikatora użytkownika (z wcześniejszym czasem) - i co wtedy? Ja sugeruję po prostu zastępowanie tego czasu bieżącym - wtedy w takim pliku identyfikator danego użytkownika wystąpi tylko raz - bo inaczej to będzie Ci się ten plik rozrastał w czasie, powodując coraz wolniejsze wpisywanie i odczyt danych.
-
będzie odczytywała wszystkie pozycje (pary: identyfikator użytkownika i czas) i porównywała bieżący czas z tym odczytanym z pliku i wyświetlała tylko te id, których czas jest nie starszy niż ustalone np. 15 minut.
Co do pliku z danymi, to masz dwa wyjścia:
a) zwykły plik tekstowy, składający się z kolejnych wierszy - tylko w tym przypadku trudno jest na nim wygodnie operować (musisz "wyłuskiwać id oraz czas, kopiować plik jeśli musisz coś w nim zmienić);
b) plik binarny zawierający poszczególne rekordy (z dwoma polami, rozmiaru ustalonego na sztywno - co do czasu jest to normalne, ale musisz ograniczyć tu maksymalną długość identyfikatora użytkownika, który będziesz trzymał) - tutaj jest łatwość, wygoda i szybkość w operowaniu na danych i ich modyfikacji (to taka namiastka bazy danych).
– Dodane 26.04.2013 (Pt) 14:38 –
Na początek proponuję napisać procedurę/funkcję zapisującą do pliku tekstowego identyfikator użytkownika i bieżący czas - do tego wystarczy przerobić trochę ten kod, który już wcześniej napisałeś. Zwróć jednak uwagę, jak zapisujesz dane do pliku - po pierwsze warto jakoś rozdzielić czas od nazwy użytkownika (np. znakiem tabulacji “\t”) by móc to potem prosto rozdzielić (funkcją explode), a czas zapisywać jako liczbę sekund (tak jak to zwraca funkcja time()). Później będzie prościej operować na różnicy bieżącego czasu i tego zapisanego w pliku (zwykłe odejmowanie).
Następnie sugeruję napisać drugą procedurę/funkcję odczytującą dane z pliku i sprawdzającą czy zapisany czas jest mniejszy od bieżącego o mniej niż 15 minut (15*60 sekund) i wypisującą identyfikatory spełniające to kryterium.
Na samym końcu - jeśli to powyższe będzie Ci poprawnie działać - dodałbym (w pierwszej funkcji) dbanie o to, by dany identyfikator się nie powtarzał - ale to wymaga przypisywania całego pliku (wiersz po wierszu) do drugiego pliku tekstowego, bo dla jednego wiersza (tego w którym powtórzy się ten sam identyfikator) musisz dokonać zmiany (a nie jesteś w stanie tego zrobić w pliku tekstowym jako takim). Czyli reasumując: kopiujesz wiersze dopóki nie występuje ten identyfikator, jak na niego trafisz, to zapisujesz go z bieżącym czasem, a potem kopiujesz dalszą resztę pliku - kopiowanie niestety z jednego pliku do drugiego (tymczasowego), potem pierwszy kasujesz a drugiemu zmieniasz nazwę na właściwa (tego pierwszego). No chyba, że u Ciebie nie nastąpi dwukrotne wysłanie formularza z tym samym identyfikatorem użytkownika.
P.S. A wiesz jak to byłoby proste jakbyś dane trzymał w bazie danych SQL?