Hallo
wie gesagt, der webserver muss mitloggen. wenn der benutzer
dann zugreift werden in den entsprechenden Zeilen der Logs
auch Benutzername angegeben!
Richtig. Die Frage ist nur, ob die Logdaten der letzten 10 Minuten auf dem Server verfügbar sind. Auf meinem Server werden immer Mitternacht die Logdaten des letzten Tages per FTP zugänglich gemacht und nach einigen Monaten wieder gelöscht. Die aktuellen Logdaten sind jedoch nicht verfügbar.
Johannes Matschke
Falls das bei gewissen Leuten anders ist, hier ein kleiner auf-meinem-Mist-gewachsen-Code:
<?php $statuscode=array(<br />100=\>'Continue',
101=\>'Switching Protocols',
200=\>'OK',
201=\>'Created',
202=\>'Accepted',
203=\>'Non-Authoritative Information',
204=\>'No Content',
205=\>'Reset Content',
206=\>'Partial Content',
300=\>'Multiple Choices',
301=\>'Moved Permanently',
302=\>'Moved Temporarily',
303=\>'See Other',
304=\>'Not Modified',
305=\>'Use Proxy',
400=\>'Bad Request',
401=\>'Unauthorized',
402=\>'Payment Required',
403=\>'Forbidden',
404=\>'Not Found',
405=\>'Method Not Allowed',
406=\>'Not Acceptable',
407=\>'Proxy Authentication Required',
408=\>'Request Time-Out',
409=\>'Conflict',
410=\>'Gone',
411=\>'Length Required',
412=\>'Precondition Failed',
413=\>'Request Entity Too Large',
414=\>'Request-URL Too Large',
415=\>'Unsupported Media Type',
500=\>'Server Error',
501=\>'Not Implemented',
502=\>'Bad Gateway',
503=\>'Out of Resources',
504=\>'Gateway Time-Out',
505=\>'HTTP Version not supported'
);
echo " **HTTP-Protokoll:** \n
\n";
$log\_array\_einzelzeilen=file('http.log');//logdatei zeilenweise in ein Array lesen
foreach ($log\_array\_einzelzeilen as $znummer =\> $zeile)//mit diesen Zeilen tue
{
$log\_array\_einzelzeilen[$znummer]=trim($zeile);//überflüssige Zeichen an Anfang und Ende entfernen
}
foreach ($log\_array\_einzelzeilen as $znummer =\> $zeile)//mit diesen Zeilen tue
{
if ($zeile==''){unset($log\_array\_einzelzeilen[$znummer]);}//Zeile, wenn leer, aus dem Array entfernen
if ((substr($zeile,strlen($zeile)-1)!='"') and (!empty($log\_array\_einzelzeilen[$znummer + 1])))
{//getrennte Zeilen zusammenfügen
$log\_array\_einzelzeilen[$znummer] = $zeile . $log\_array\_einzelzeilen[$znummer + 1];
unset($log\_array\_einzelzeilen[$znummer + 1]);
}
}
unset($log);
foreach ($log\_array\_einzelzeilen as $zeile)//mit den restlichen Zeilen tue
{
$log\_array\_einzelstrings=explode(' ',$zeile,12);//Zeile in Einzelstrings aufteilen
/\* [0] =\> IP
[1] =\> -
[2] =\> User
[3] =\> [Tag(2)/Monat(3)/Jahr(4):Stunde(2):Minute(2):Sekunde(2)
[4] =\> Zeitzone(5)]
[5] =\> "Methode
[6] =\> Request
[7] =\> Protokoll"
[8] =\> Statuscode
[9] =\> Größe in Byte
[10] =\> "Referer"
[11] =\> "Browserkennung" \*/
//Einzelstrings aufbereiten
$log\_array\_einzelstrings[3] = str\_replace('[','',$log\_array\_einzelstrings[3]);
$log\_array\_einzelstrings[4] = str\_replace(']','',$log\_array\_einzelstrings[4]);
$log\_array\_einzelstrings[5] = str\_replace('"','',$log\_array\_einzelstrings[5]);
if (substr\_count($log\_array\_einzelstrings[6],'?')\>0)
{$log\_array\_einzelstrings[6] = substr($log\_array\_einzelstrings[6],0,strpos($log\_array\_einzelstrings[6],'?'));}
$log\_array\_einzelstrings[7] = str\_replace('"','',$log\_array\_einzelstrings[7]);
$log\_array\_einzelstrings[10] = str\_replace('"','',$log\_array\_einzelstrings[10]);
if (substr\_count($log\_array\_einzelstrings[10],'?')\>0)
{$log\_array\_einzelstrings[10] = substr($log\_array\_einzelstrings[10],0,strpos($log\_array\_einzelstrings[10],'?'));}
$log\_array\_einzelstrings[11] = str\_replace('"','',$log\_array\_einzelstrings[11]);
if ($log\_array\_einzelstrings[8]!='200')
{$log\_array\_einzelstrings[12] = $log\_array\_einzelstrings[8] .' '. $log\_array\_einzelstrings[6];}
if (substr\_count($log\_array\_einzelstrings[11],'http://')\>0)
{$log\_array\_einzelstrings[13] = $log\_array\_einzelstrings[5] .' '. $log\_array\_einzelstrings[6] .' '. $log\_array\_einzelstrings[11];}
/\* [0] =\> IP
[1] =\> -
[2] =\> User
[3] =\> Tag(2)/Monat(3)/Jahr(4):Stunde(2):Minute(2):Sekunde(2)
[4] =\> Zeitzone(5)
[5] =\> Methode
[6] =\> Request (ohne Querysting)
[7] =\> Protokoll
[8] =\> Statuscode
[9] =\> Größe in Byte
[10] =\> Referer (ohne Querysting)
[11] =\> Browserkennung
[11] =\> Statuscode Request (wenn Statuscode != '200')
[12] =\> Methode Request Browserkennung (wenn 'http://' in Browserkennung) \*/
foreach ($log\_array\_einzelstrings as $estringtyp =\> $estring)//mit diesen Einzelstrings tue
{
if (@in\_array($estring,$log[$estringtyp]['str']))//(B):Wenn diese IP in $log[0][str] schon existiert
{
$log[$estringtyp]['anzahl'][array\_search($estring,$log[$estringtyp]['str'])]++;//(B):dann erhöhe $log[0][anzahl][\*Nummer der IP\*]
}
else//sonst
{
$log[$estringtyp]['str'][]=$estring;//(B):Füge die IP in $log[0][str] ein
$log[$estringtyp]['anzahl'][]=1;//(B):Füge die Anzahl 1 in $log[0][anzahl] ein
}
}
}
foreach ($log as $typ=\>$inhalt)
{
if (in\_array($typ,array(0,2,5,6,7,8,10,11,12,13)))
{
switch ($typ)
{
case 0: echo "IPs"; break;
case 2: echo "User"; break;
case 5: echo "Methoden"; break;
case 6: echo "Anfragen"; break;
case 7: echo "Protokolle"; break;
case 8: echo "Statuscodes"; break;
case 10: echo "Referer"; break;
case 11: echo "Browserkennungen"; break;
case 12: echo "Probleme beim Aufruf"; break;
case 13: echo "Suchmaschinen"; break;
}
echo "\n==============\n";
array\_multisort($inhalt['str'],$inhalt['anzahl']);
foreach ($inhalt['str'] as $knummer=\>$derstring)
{
echo str\_pad($inhalt['anzahl'][$knummer],4,' ',STR\_PAD\_LEFT).'x '.$derstring;
if ($typ==8) {echo ' - '.$statuscode[$derstring];}
echo "\n";
}
echo "\n\n";
}
}
echo "\n
\n\n";
?\>