Ladezeit optiemieren -> MySQL oder Textdatei
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
beitrag
byte
date
datei
daten
derzeitige dokumentation
deswegen
format
funktion
gen
log
meisten
methode
sauen
speicher
sprache
status
tabelle
textdatei
verstehe
-
ICh m?chte fragen, mit welcher methode die seite schneller geladen wird:
log-daten als textdatei abspeichern (daten erfassen, datei ?ffnen, werte hinzuf?gen, datei schliesen)
oder
log-datein in MySQL-Tabelle abspeichern (daten erfassen, verbindung herstellen, daten eintragen, verbindung trennen)
Danke!!
Edit:
Oder gibt es ?berhaupt eine andere M?glichkeit um log-informationen zu speichern? (referer, ip, zeit, sprache, host,...)
Beitrag ge?ndert am 10.11.2005 20:30 von dussel -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
ICh m?chte fragen, mit welcher methode die seite schneller geladen wird:
log-daten als textdatei abspeichern (daten erfassen, datei ?ffnen, werte hinzuf?gen, datei schliesen)
oder
log-datein in MySQL-Tabelle abspeichern (daten erfassen, verbindung herstellen, daten eintragen, verbindung trennen)
Auch wenn mich die MySQL-Fanatiker jetzt sicher gerne steinigen m?chten:
Um simple Logfiles zu archivieren, ist eine Datei die schnellere Alternative. Man kann mit dem Append-Modus ( fopen($blubb, 'a')) Daten ziemlich einfach und schnell an eine existierende Datei anh?ngen.
Bei der Datenbankversion ist die Verbindung zum Datenbank-Server der Flaschenhals. Die Geschwindigkeit deines Scripts h?ngt also von dieser Verbindung ab. Beim Shared-Hosting kommt das Problem dazu, dass du dir den Datenbankserver mit anderen Usern teilen musst.
Au?erdem kann eine Standard-Logfile-Datei (CLF) von vielen Logfile-Analyze-Programmen ausgewertet werden. F?r eine Datenbank m?sstest du erst ein Analyse- oder Konvertierprogramm schreiben.
Oder gibt es ?berhaupt eine andere M?glichkeit um log-informationen zu speichern? (referer, ip, zeit, sprache, host,...)
Wirklich sinnvolle Alternativen gibt es meines Wissens nicht. -
ja, dann werde ich das mit der textdatei weiterverwenden!
du hast etwas von CLF datein geschrieben! Was ist das?? ich habe es bis jetzt mit einer *.txt datei gemacht! -
CLF hei?t "combined logfile format". In diesem Format speichern Webserver meistens ihre Server-Logs, beispielsweise der Apache-Webserver. Den Aufbau einer Zeile dieses Formats kannst du dir hier erkl?ren lassen:
http://de.selfhtml.org/projekt/kontrollieren.htm#logdateien
Im Prinzip sind es auch gew?hnliche Text-Dateien. Die Endung ist dabei egal, aber meistens lautet sie ".log".
Wenn ich mal unversch?mt Werbung f?r meine foxy_access_log-Funktion (ehemals update_log) machen d?rfte:
http://alopex.pyrokar.lima-city.de/index.php/PHP/essentials.html#update_log
Die derzeitige Dokumentation ist allerdings unter aller Sau.
MfG
alopex -
[...]
Wenn ich mal unversch?mt Werbung f?r meine foxy_access_log-Funktion (ehemals update_log) machen d?rfte:
http://alopex.pyrokar.lima-city.de/index.php/PHP/essentials.html#update_log
Die derzeitige Dokumentation ist allerdings unter aller Sau.
MfG
alopex
Ich verstehe sowieso nicht, wieso du immer so viel Code f?r so ein kleines Problem schreibst. ^^
<?php /* +-----------------------------------------------------------------------+ | Dieses Werk bzw. Inhalt steht unter einer Creative Commons Namensnennung 3.0 Unported Lizenz. | http://creativecommons.org/licenses/by/3.0/ +-----------------------------------------------------------------------+ | @version : v0.1.0 | | @filename : /plugins/log.php | | @created : 25.10.2005 | | @modified : 11.11.2005 | +-----------------------------------------------------------------------+ */ $log = array (); $log['ip'] = ( isset ( $_SERVER['X-FORWARDED-FOR'] ) && trim ( $_SERVER['X-FORWARDED-FOR'] ) ) ? $_SERVER['X-FORWARDED-FOR'] : ''; $log['ip'] = ( isset ( $_SERVER['HTTP_X_UD_REMOTE_ADDR'] ) && trim ( $_SERVER['HTTP_X_UD_REMOTE_ADDR'] ) ) ? $_SERVER['HTTP_X_UD_REMOTE_ADDR'] : ''; $log['ip'] = ( trim ( $log['ip'] ) ) ? $log['ip'] : $_SERVER['REMOTE_ADDR']; // IP des Users $log['user'] = 'Gast'; // Benutzername $log['logdate'] = date ( 'd/M/Y:H:i:s O', time () ); // Datum f?r Log Datei $log['method'] = ( isset ( $_SERVER['REQUEST_METHOD'] ) ) ? $_SERVER['REQUEST_METHOD'] : 'GET'; // Methode $log['uri'] = ( isset ( $_SERVER['REQUEST_URI'] ) ) ? $_SERVER['REQUEST_URI'] : '-'; // URI $log['protocol'] = ( isset ( $_SERVER['SERVER_PROTOCOL'] ) ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.1'; // Protokoll $log['status'] = '200'; // Status $log['bytes'] = '-'; // gesendete Bytes $log['referer'] = ( isset ( $_SERVER['HTTP_REFERER'] ) && trim ( $_SERVER['HTTP_REFERER'] ) ) ? $_SERVER['HTTP_REFERER'] : '-'; // Refer, falls nicht gesetzt ist er "-" $log['user_agent'] = ( isset ( $_SERVER['HTTP_USER_AGENT'] ) ) ? $_SERVER['HTTP_USER_AGENT'] : '-'; // Betriebsystem, Browser und Sprache $line = $log['ip'].' - '.$log['user'].' ['.$log['logdate'].'] "'.$log['method'].' '.$log['uri'].' '.$log['protocol'].'" '.$log['status'].' '.$log['bytes'].' "'.$log['referer'].'" "'.$log['user_agent'].'"'."\x0d\x0a"; $months = array ( 1 => 'Januar', 2 => 'Februar', 3 => 'Maerz', 4 => 'April', 5 => 'Mai', 6 => 'Juni', 7 => 'Juli', 8 => 'August', 9 => 'September', 10 => 'Oktober', 11 => 'November', 12 => 'Dezember' ); $month = date ( 'n' ); // Monat $month = $months[$month]; // deutscher Monatsname $file = 'logs/log_'.$month.'_'.date ( 'Y', time () ).'.log'; $f = fopen ( $file, 'a' ); flock ( $f, LOCK_EX ); fputs ( $f, $line ); flock ( $f, LOCK_UN ); fclose ( $f ); ?>
Hab den Code gerade mal umgeschrieben sollte aber klappen.
MfG Lucas
Beitrag ge?ndert am 11.11.2005 22:12 von lucas9991
Beitrag zuletzt geändert: 23.7.2011 13:09:35 von karpfen -
Ich verstehe sowieso nicht, wieso du immer so viel Code f?r so ein kleines Problem schreibst. ^^
Deswegen:
$f = fopen ( $file, 'a' );
flock ( $f, LOCK_EX );
fputs ( $f, $line );
flock ( $f, LOCK_UN );
fclose ( $f );
Du hast nichtmal die "@"s vor die Funktionsnamen gemacht. Wenn man eine Datei mit fopen() ?ffnet, kann man nie sicher sein, ob sie auch ge?ffnet werden konnte. Das Gleiche gilt f?r flock(). Und schlie?lich hat dein Code noch einen Haken: Bricht der Benutzer den Ladevorgang ab, wenn gerade versucht wird, ins Logfile zu schreiben, wird auch das PHP-Script pl?tzlich beendet. Deswegen in meinem Code die umst?ndlichen Sicherheitsabfragen. Das gleiche gilt ?brigens auch f?r Datenbankverbindungen, wenn sie nicht "permanent" sind.
Dein Code wird auf einer stark frequentierten Site ?ber kurz oder lang fehlerhafte Logfile-Eintr?ge hinterlassen. Es kann auch passieren, dass Logeintr?ge nicht geschrieben werden. Das sieht man nat?rlich dem Logfile hinterher nicht an.
Und wenn du wirklich Code-Zeilen sparen willst: Du kannst
flock ( $f, LOCK_UN );
weglassen, das macht fclose() automatisch. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage