PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mit PHP aus Apache_log Traffic errechnen



luxores
03-04-2007, 22:32
Ich will mit Hilfe von PHP meine Log-Dateien auslesen und dann den Traffic zusammen rechnen.

127.0.0.1 - - [09/Nov/2006:15:54:54 +0100] "GET /style.css HTTP/1.1" 200 4535 "http://www.x.de/FFD_index.html" "Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko) (Kubuntu)"
127.0.0.1 - - [09/Nov/2006:15:54:54 +0100] "GET /back.gif HTTP/1.1" 200 922 "http://www.x.de/FFD_index.html" "Mozilla/5.0 (compatible; Konqueror/3.5; Linux) KHTML/3.5.5 (like Gecko) (Kubuntu)"
Um die dick markierten Zahlen geht es. Da ich noch nicht so gut in PHP bin, bekomme ich kein performantes Script hin.
Könnt ihr mir bitte helfen?

undefined
04-04-2007, 19:12
Also das ist keine gute Idee, Zugriffrechte ;)
Du solltest eine Extra Log in deinem Gewünschten Format erstellen.
Und an einem Platz Speichern wo sie zum Account gehört. Das Log Verzeichnis gehört root ;)
Beispiel:

LogFormat "<log><date>%{%D}t</date><time>%{%T}t</time><status>%>s</status><agent>%{User-agent}i</agent></log>" accessLog
CustomLog /srv/www/htdocs/owner/tmp/Access.xml accessLog

Siehe Apache Manual

luxores
04-04-2007, 19:15
Also das ist keine gute Idee, Zugriffrechte ;)
Du solltest eine Extra Log in deinem Gewünschten Format erstellen.
Und an einem Platz Speichern wo sie zum Account gehört. Das Log Verzeichnis gehört root ;)
Beispiel:

LogFormat "<log><date>%{%D}t</date><time>%{%T}t</time><status>%>s</status><agent>%{User-agent}i</agent></log>" accessLog
CustomLog /srv/www/htdocs/owner/tmp/Access.xml accessLog

Siehe Apache Manual
An die Log-Datei komm ich schon ran, aber ich habe Probleme mit dem RegEx. Ich bekomme keinen Richtigen hin der mir die Daten richtig auswertet. Zum Logformat: Ich werde bei dem Standard bleiben.
schon mal danke für weitere hilfe.

undefined
04-04-2007, 19:17
Es geht nicht darum das du daran kommst es geht darum das dieses Verzeichnis eine restricted Area ist nur dem Administrator zur Verfügung stehen sollte.
Mit Custom Log kannst du vor allem den Regexp (Den du im übrigen gar nicht brauchst siehe sprintf() bzw, sscanf() (http://www.php.net/manual/de/function.sscanf.php) ;) ) sparen. ;)

BlueJay
07-04-2007, 13:18
Also das ist keine gute Idee, Zugriffrechte ;)
Du solltest eine Extra Log in deinem Gewünschten Format erstellen.
Und an einem Platz Speichern wo sie zum Account gehört. Das Log Verzeichnis gehört root ;)


Die Provider, z.B. Strato, liefern die Logs aber nun mal in der oblgen Form aus.

Was man machen kann:
Das Leerzeichen scheint ein Trenner zu sein, also splittet man damit, erhält seine Zahl an der bestimmten Stelle und summiert den Quatsch auf. - ganz ohne RegEx


Feddich!

so long,
BlueJay

nEox
08-04-2007, 09:08
Hallo Luxores,

wie Undefined schon richtig gesagt hat, ist es das Einfachste sscanf() zu verwenden. Die Position der Informationen in der jeweiligen Log-Zeile (z. b. an welcher Stelle genau das Datum kommt) wird durch das Log-Format des Apaches bestimmt. Infos dazu findest du hier:
http://httpd.apache.org/docs/2.0/mod/mod_log_config.html

In den Kommentaren zu der sscanf()-Funktion findest du sogar ein Codebeispiel zum "Common" Log-Format (ungetestet):

$log = array();
$n = sscanf(trim($line), '%s %s %s [%[^]]] "%s %s %[^"]" %d %s "%[^"]" "%[^"]"',
$log['ip'],
$log['client'],
$log['user'],
$log['time'],
$log['method'],
$log['uri'],
$log['prot'],
$log['code'],
$log['bytes'],
$log['ref'],
$log['agent']
);

Grüße,
nEox

luxores
08-04-2007, 09:59
Hallo Luxores,

wie Undefined schon richtig gesagt hat, ist es das Einfachste sscanf() zu verwenden. Die Position der Informationen in der jeweiligen Log-Zeile (z. b. an welcher Stelle genau das Datum kommt) wird durch das Log-Format des Apaches bestimmt. Infos dazu findest du hier:
http://httpd.apache.org/docs/2.0/mod/mod_log_config.html

In den Kommentaren zu der sscanf()-Funktion findest du sogar ein Codebeispiel zum "Common" Log-Format (ungetestet):

$log = array();
$n = sscanf(trim($line), '%s %s %s [%[^]]] "%s %s %[^"]" %d %s "%[^"]" "%[^"]"',
$log['ip'],
$log['client'],
$log['user'],
$log['time'],
$log['method'],
$log['uri'],
$log['prot'],
$log['code'],
$log['bytes'],
$log['ref'],
$log['agent']
);

Grüße,
nEox

ah danke, jetzt kann ich mir daraus was bauen. :)
THX