Naast aantal hits, bezochte pagina's, gebruikte browser etc. wil ik ook het verbruikte dataverkeer per uur opslaan in een database. De eenvoudigste weg hiervoor (die voor mij overigens nog redelijk moeilijk was
), is het uitlezen van de apache logfiles:
Deze code bevriest alleen als de logfile groter is dan een paar MB. Wat ik dus wil, is de logfile bijvoorbeeld per 100 regels uitlezen. En omdat ik toch elke dag de logfile uitlees, hoeven alleen de regels van vandaag uitgelezen te worden. Hiertoe ben ik begonnen met het volgende: ik neem de datum van vandaag (regel 3) en geef false terug als deze datum niet met de datum in de gegeven logfile-regel overeenkomt. De bedoeling is dat parse_log op dat moment stopt met regels uit access.log te halen.
Ik heb hulp nodig bij het volgende:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| function parse_line($line) { $data = array(); $today = date('d/M/Y'); $regexp = '/^(.+?) (.+?) (.+?) \\\[(.+?)\\] "(.+?)" (\\d+) (\-|\\d+)( "(.+?)")?( "(.+?)")?\\s*$/i'; if (preg_match($regexp, $line, $matches) && count($matches) > 0) { if (strstr($matches[4], $today)) { // niet alle matches opgesomd... $data["datetime"] = $matches[4]; $data["length"] = $matches[7]; return $data; } else { return false; } } function parse_log() { $lines = file("access.log"); $log = array(); for ($i = 0; $i < count($lines); $i++) { $data = parse_line($lines[$i]); if ($data != false) { $log[] = $data; } } return $log; } |
Deze code bevriest alleen als de logfile groter is dan een paar MB. Wat ik dus wil, is de logfile bijvoorbeeld per 100 regels uitlezen. En omdat ik toch elke dag de logfile uitlees, hoeven alleen de regels van vandaag uitgelezen te worden. Hiertoe ben ik begonnen met het volgende: ik neem de datum van vandaag (regel 3) en geef false terug als deze datum niet met de datum in de gegeven logfile-regel overeenkomt. De bedoeling is dat parse_log op dat moment stopt met regels uit access.log te halen.
Ik heb hulp nodig bij het volgende:
- logfile per 100 regels uitlezen
- functie parse_log stoppen en resultaat laten retourneren als parse_line een datum tegenkomt die niet overeenkomt met die van vandaag
"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."