Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [inne][PHP]Pobieranie danych z pliku tekstowego i filtrowanie ich
lekosm2
post
Post #1





Grupa: Zarejestrowani
Postów: 141
Pomógł: 0
Dołączył: 9.10.2015

Ostrzeżenie: (0%)
-----


Witam. Chciałbym zrobić skrypt, który będzie zliczał ilość spędzonych /minut/godzin na serwerze. Jedyny sposób jaki mi przychodzi do głowy to pobieranie tej informacji z logów gdzie m.in. zapisuje się czas kiedy użytkownik wszedł na serwer i kiedy z niego wyszedł.
Logi wejścia/wyjścia z serwera są zapisywane w pliku z rozszerzeniem .log i wyglądają tak:
Kod
5-10-09 06:23:30.163577|INFO    |VirtualServerBase|  1| client disconnected 'lekosm2'(id:2) reason 'reasonmsg=leaving'
2015-10-09 06:23:33.997875|INFO    |VirtualServerBase|  1| client connected 'lekosm2'(id:2) from 11.11.11.111:57105
2015-10-09 06:23:41.896634|INFO    |VirtualServerBase|  1| client disconnected 'lekosm2'(id:2) reason 'reasonmsg=leaving'
2015-10-09 06:23:43.042064|INFO    |VirtualServerBase|  1| client connected 'lekosm2'(id:2) from 11.11.11.111:57105

Ma ktoś jakiś pomysł co dalej z tym zrobić? W jaki sposób mam wykonać? (IMG:style_emoticons/default/ohno-smiley.gif)

Ten post edytował lekosm2 9.10.2015, 07:45:26
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Pyton_000
post
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


  1. <?php
  2. $logs = "2015-10-09 06:23:30.163577|INFO |VirtualServerBase| 1| client disconnected 'lekosm2'(id:2) reason 'reasonmsg=leaving'
  3. 2015-10-09 06:23:33.997875|INFO |VirtualServerBase| 1| client connected 'lekosm2'(id:2) from 11.11.11.111:57105
  4. 2015-10-09 06:23:41.896634|INFO |VirtualServerBase| 1| client disconnected 'lekosm2'(id:2) reason 'reasonmsg=leaving'
  5. 2015-10-09 06:23:43.042064|INFO |VirtualServerBase| 1| client connected 'lekosm2'(id:2) from 11.11.11.111:57105
  6. 2015-10-09 06:23:48.042064|INFO |VirtualServerBase| 1| client disconnected 'lekosm2'(id:2) from 11.11.11.111:57105";
  7.  
  8. $usersTime = array();
  9. foreach (explode("\n", $logs) as $log) {
  10. preg_match('/^(.{26})\|.*?client (connected|disconnected) \'(.*?)\'/', $log, $match);
  11. $usersTime[$match[3]][] = array($match[2], strtotime($match[1]));
  12. }
  13.  
  14. foreach ($usersTime as $user => $datas) {
  15. $usersTime[$user]['time'] = 0;
  16. if(isset($datas[0]) && $datas[0][0] == 'disconnected') {
  17. array_shift($datas);
  18. }
  19. $counter = count($datas);
  20. if($counter%2 !== 0) {
  21. pop($datas);
  22. }
  23.  
  24. for ($i=0; $i < $counter; $i +=2) {
  25. $usersTime[$user]['time'] += $datas[$i+1][1] - $datas[$i][1];
  26. }
  27. var_dump($user . ': ' .$usersTime[$user]['time'] .'s');
  28. }


Oczywiście to jest mega do poprawki, optymalizacji itd. To jest szkic tego co chcesz. Nie przyjmuje wiele założeń ale:
jeśli w logu dla usera pierwsze jest disconnect to wywalamy.
Zakłada toto że user zawsze ma parę connect -> disconnect (nie uwzględnia np. connect, connect, disconnect, (np. z 2 klientów równocześnie))

Do tego jeśli wczytujesz z pliku to zamiast explode ma być file() z odpowiednią flagą

Ten post edytował Pyton_000 9.10.2015, 09:35:54
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.10.2025 - 02:42