Kleines, schmutziges Script zur manuellen Logfileanalyse
Marko
- software
Hallo allerseits,
ich habe mir gerade ein kleines Kommandozeilen PHP-Script zur manuellen Logfileanalyse geschreiben. Es ist ein schmutziges, kleines Stück Code, schnell hingeworfen, das mir nur zu einem Zweck dient. Es lassen sich damit Pfade von Besuchern über die Seite verfolgen. Das ist ganz interessant zur Seitenoptimierung.
Ganz klare Schwächen sind: gleiche IP ist nicht unbedingt gleicher Besucher, wenn 2 Besucher gleichzeitig auf der Seite sind geht es auch nicht, da es nur sequentiell das Logfile filtert.
Aber es reicht um grobe Tendenzen zu erkennen, mehr nicht. Vielleicht ist auch nützlich als Grundlage für etwas erweiterte Programme. Ich selbst habe nicht die Absicht mehr draus zu machen, oder es gar zu supporten. War nur für den Eigenbedarf gedacht.
Anwendung unter Linux:
Nachstehenden Code in eine Datei "loganalyse.php" speichern. Und an der Kommandozeile aufrufen. Die erste Zeile: #!/usr/bin/php -q
ist Linux spezifisch und sagt welcher Interpreter verwendet werden soll, '-q' unterdrückt den HTTP header (der auf der Kommandozeile nicht wirklich Sinn macht). Mit chmod a+x ausführbar machen, dann mit ./loganalyse.php logfilename.txt aufrufen.
Anwendung unter Windows:
Weiss nicht genau, aber wohl #!/usr/bin/php -q rauslöschen und mit php -q loganalyse.php logfilename.txt aufrufen. Hab kein Windows also keine Garantie dass es so geht.
Gruss
Marko
Das Programm:
#!/usr/bin/php -q
<?
/**
* Bei Erweiterungen und Verbesserungen wäre eine Mail an:
* analyser@rhein-neckar-guide.de ganz nett.
*/
$client = "";
$stdin = fopen('php://stdin', 'r');
if( $argv[1] == "" ){
print("Aufruf mit: loganalyser.php <logfilename>\n");
die();
}
if( !($file = @fopen( $argv[1],"r" ))){
die("Logfile öffnen fehlgeschlagen: $argv[1] \n");
}
while( $line = fgets( $file ) ){
$linearray = explode(" ", $line );
// wenn als nächstes ein neuer Besucher kommt stoppen
if( $client != $linearray[0] ){
$client = $linearray[0];
print("Weiter mit beliebiger Taste\n\n\n");
$key = fgetc( $stdin ); // press any key
print( "ip: ".$linearray[0]."\n" );
print( "time: ".$linearray[3]."\n" );
print( "referrer: ".$linearray[10]."\n" );
}
if( ( strpos( $linearray[6], ".html" ) || // nur php und html seiten anzeigen
strpos( $linearray[6], ".php" ) ) &&
// datei statistics.php interessiert auch nicht
!strpos( $linearray[6], "statistics.php" ) ){
print( $linearray[6]."\n" ); // aufgerufene URL ausgeben
}
}
fclose( $file );
?>