? Logfile (access.log) auslesen ?

NoFate

Mitglied
Moin Community,

ich armer Halbwissender brauche mal wieder die geschätzte Hilfe ;-)

Ich möchte eine Logdatei zeilenweise auslesen, die wie folgt aufgebaut ist:

80.130.188.xxx - - [01/Jul/2002:09:11:11 +0200] "GET /directory/subdirectory/file.xxx HTTP/1.1" 200 4171

Ich brauche die letzten beiden Zahlenblöcke hier "200" und "4171". Der letzte Block kann auch ein "-" sein; der Pfad kann auch anders strukturiert sein. Daher denke ich, ich muss die Zeile von hinten nach vorne einlesen. Hat jemand einen Tipp, wie ich die das in PHP lösen kann?

Die Werte der einzelnen Zahlenblöcke sollen natürlich in Variablen ausgegeben werden...

Danke schon einmal für die Hilfe.

NoFate
 
wird die acces.log von einem script geschrieben, dass du verändern kannst? wenn ja versuch mal seperators reinzusetzen, damit du die einzelnen blöcke trennen kannst. sprich:

80.130.188.xxx | - | - | [01/Jul/2002:09:11:11 +0200] | "GET /directory/subdirectory/file.xxx HTTP/1.1" | 200 | 4171

dann kannstes mit explode(); in ein array zerstückeln (wie man explode nutzt, bitte http://www.php.net entnehmen)
 
wie soll er in seine access.log denn separatoren einbauen? die kommt vom apache!
Code:
<?php

$logfile = file(access.log);

$vararr = explode(" ", $logfile[zeile]);

$cnt = count($vararr);
echo $vararr[$cnt-2]; ## der vorletzte wert
echo $vararr[$cnt-1]; ## der letzte wert
?>

soweit ich weiß, ist das leerzeichen der separator bei dem apache-logfile-standard.
 
soweit war ich auch schon mit den leerzeichen, aber es kommen ja auch noch leerzeichen vor, die gar keinen Block bilden (zB. nach GET) deswegen hätte ich das mit seperators gemacht.

dass die file aber von apache erstellt wird wusste ich nicht (ich nutze ihn, kenne ihn aber nicht auswendig :p )
 
klar.
hehe... aber les mal den code genau.
ich gehe ja das array von hinten durch. die letzten beiden werte enthalten IMHO keine leerzeichen.


ps: man muss den apachen nicht auswendig lernen, um die syntax der access.log zu kennen.
 
Ich habs selbst gefunden.

Aber danke für die Tipps :-D

PHP:
<?
$f = "access.log"; // Logfile
$logarray = file($f); // Zeilen in Array laden
$traffic = 0; // Ausgabe auf null setzen
foreach($logarray as $row) 
	{
    $sort1 = strlen($row);
	$substring = explode(" ",$row); // Segmentieren
	$byte = array_pop($substring); // Array von hinten auslesen
	if(byte=="-") // Wenn $byte ein "-" ist, dann durch "0" ersetzen
		{
		$byte=0;
		}
	$traffic = $traffic + $byte; 
	}
$kbyte = $traffic / 1024;
$mbyte = $kbyte / 1024;
echo "$traffic" . " Byte\n";
echo "$kbyte" . " KByte\n";
echo "$mbyte" . " MByte\n";
?>

Und nu gibt er mir das auch aus, so wie ich das will
*freu*

Grüße,

NoFate
 
Zuletzt bearbeitet:
Zurück