log datei auslesen und in Datenbank eintragen

aspera

Grünschnabel
Ich habe folgendes problem und zwar möchte ich eine logdatei auslesen welche folgendermaßen aussieht

#StartDate: 0000-00-00 00:00:00
#EndDate: 2000-00-00 00:00:00
#TimeFormat: Local (-60)
#EncodingFormat: UTF-8
#ServerName: xxxx
#ServerIP: xxxx
#Software: Windows Media Services
#Version: x.xx.xx
#PublishingPoint: [Global]
#Fields: c-ip date time c-dns cs-uri-stem c-starttime x-duration c-rate c-status c-playerid c-playerversion c-playerlanguage cs(User-Agent) cs(Referer) c-hostexe c-hostexever c-os c-osversion c-cpu filelength filesize avgbandwidth protocol transport audiocodec videocodec channelURL sc-bytes c-bytes s-pkts-sent c-pkts-received c-pkts-lost-client c-pkts-lost-net c-pkts-lost-cont-net c-resendreqs c-pkts-recovered-ECC c-pkts-recovered-resent c-buffercount c-totalbuffertime c-quality s-ip s-dns s-totalclients s-cpu-util cs-user-name s-session-id s-content-path cs-url cs-media-name c-max-bandwidth cs-media-role s-proxied

IP 0000-00-00 00:00:00 - /live 0 195 1 200 {Player ID} 10.0.0.3646 de-DE WMFSDK/10.0.0.3646_Applikation/Versionsnummer(Kennung von Player) - Browser Browserversion Betriebsystem Prozessor 195 11217186 297106 Protokoll TCP Windows_Media_Audio_9.1 Windows_Media_Video_9_Advanced_Profile - 7257634 7257634 3781 3781 0 0 0 0 0 0 1 5 100 IP 1 0 - 96 Publishingpoint http://xx(Url) 2928163 StreamID 0


so diese soll halt ausgelesen und in eine mysql datenbank importiert werden
konnte auch schon die datei auslesen aber weiß absolut nicht wie ich diese in die datenbank importiere!

Wie kann ich dies machen

Danke schonmal im vorraus.
 
Hallo!

Wie sieht denn die Datenbank aus, in die das Log eingetragen werden soll? Soll einfach nur der gesamte Text in ein Text-Datenbankfeld oder soll das Log noch auseinander gebaut werden?

Mamphil
 
nein da wo #fields steht das sind die tabellen die in der datenbank drinne steht und die log soll auch auseinander genommen werden.
 
Ok, scheinbar sieht das Log so aus, dass für jeden Eintrag eine Zeile verwendet wird. Wenn du die Log-Datei per file() einliest, hast du automatisch jede Zeile als Element eines Arrays vorliegen. Dieses Array gehst du dann mit foreach durch und musst die einzelnen Zeilen analysieren:
Mit Hilfe von strpos() ermittelst du zuerst die Position des ersten Doppelpunkts. Dann trennst du die Zeile in den Teil vorm ":" und dem danach auf. Dies kannst du auch alternativ mit explode(':', $deinTeilString, 2) erreichen (du erhältst wieder ein Array, das erste Element enthält z. B. "#StartDate", das zweite "0000-00-00 00:00:00").
Diese Teile müssen dann zum Datenbank-Query zusammengefügt werden. Dafür würde ich die einzelnen Elemente zuerst in ein weiteres Array speichern und dann nach der kompletten Analyse das Query daraus basteln.

Mamphil
 
könntest du das ein bisschen einfacher erklären da ich erst angefangen habe mit php und mysql deswegen ist der satz noch nicht ganz so verständlich für mich.

Danke dir schonmal im vorraus
 
Hallo!

Ich habe das folgende nur schnell zusammengetippt und nicht ausprobiert:
PHP:
unset($ergebnis);
$ergebnis = array();
$logfile = file('Pfad/zu/der/Log-Datei.txt');
while ($logfile as $zeile) {
	// wenn das erste Zeichen der Zeile eine Raute ist...
	if ($zeile{0} == '#') {
		// trenne die Zeile anhand des ersten Doppelpunkts auf
		$log = explode(':', substr($zeile, 1), 2);
		// Was vorm Doppelpunkt steht wird als Array-Schlüssel verwendet,
		// was dahinter steht als Wert
		$ergebnis[$log[0]] = $log[1];
		}
	else // wenn das erste Zeichen keine Raute ist, füge die Zeile einfach an den letzten Wert an:
		$ergebnis[$log[0]] .= $zeile;
	}

// gebe testweise das Array aus:
echo '<pre>';
print_r($ergebnis);
echo '</pre>';

// $db ist die Datenbank-Ressourcen-Kennung
// mache die Log-Einträge sicher:
foreach ($ergebnis as $key => $value)
	$ergebnis[$key] = mysql_real_escape_string($value, $db);

// jetzt kann das MySQL-Query erstellt werden:
$sql = 'INSERT INTO `bla` (`StartDate`, `EndDate`, ...) VALUES ("'.$ergebnis['StartDate'].'", "'.$ergebnis['EndDate'].'", ...)';

Mamphil
 
Die Erklärung findest du in den orangen Zeilen zwischen dem Code (in den Kommentaren ;) )

Mamphil
 
Zurück