Geisterts? Textdatei als Datenbankersatz...
sroto
- datenbank
0 Yeti0 Andreas Görtz0 sroto
Hallo
Auf meiner Homepage führe ich eine kleine Zugriffsstatistik und speichere die Zugriffsdaten in einer Textdatei.
Das Script sieht etwa folgender massen aus:
$Datei=fopen("statistik.txt","r+");
fwrite($Datei,str_replace("\n","",$Timestamp));
fwrite($Datei,"#");
fwrite($Datei,str_replace("\n","",$IP));
fwrite($Datei,"#");
fwrite($Datei,str_replace("\n","",$Browser));
fwrite($Datei,"#");
fwrite($Datei,str_replace("\n","",gethostbyaddr($IP)));
fwrite($Datei,"#");
fwrite($Datei,str_replace("\n","",$HTTP_SERVER_VARS["HTTP_REFERER"]));
fwrite($Datei,"\n");
fclose($Datei);
Jede Zeile stellt einen Datensatz dar. Die Felder sind durch # getrennt.
So weit so gut. Nun kommt es aber zum Teil vor, dass sich unerklärliche Zeilenumbrüche in einen Datensatz einschmuggeln, obwohl ich zusätzlich mit str_replace alle möglichen Zeilenumbrüche ersetze.
1095018938#81.63.118.124#)Browser#bsp#referer
1095018939#81.63.118.124#)Browser#bsp#referer
1095018940#81.63.118.124#)Brow
ser#bsp#referer
1095018941#81.63.118.124#)Browser#bsp#referer
1095018942#81.63.118.124#)Browser#bsp#referer
Wenn es in einem Feld einen Zeilenumbruch hat, bringt das natürlich die ganze Struktur durcheinander und ich kriege grosse Probleme beim auslesen.
Hatte schon jemand ein ähnliches Problem? Woher stammen diese Zeilenumbrüche? Kann es sein, dass wenn 2 User gleichzeitig auf die Homepage zugreifen, der Server die Textdatei "verunstaltet"?
Oder sind die Zeilenumbrüche das Werk von Geister in der Maschine, die durch zufällige Codesegmente hervorgerufen werden???
Oder würdet ihr die Textdatei anders aufbauen?
Vielen Dank für die Hilfe!!
Grüsse
sroto
Hi,
Oder würdet ihr die Textdatei anders aufbauen?
Ja! Schau dir mal http://php.net/serialize und http://php.net/unserialize an. :-)
Der Yeti
Hi,
Hatte schon jemand ein ähnliches Problem? Woher stammen diese Zeilenumbrüche?
es könnte daran liegen, dass es ein anderer Zeilenumbruch als "\n" ist, z.B. "\r\n". Statt str_replace() solltest du trim() benutzen (http://www.php.net/manual/en/function.trim.php).
Kann es sein, dass wenn 2 User gleichzeitig auf die Homepage zugreifen, der Server die Textdatei "verunstaltet"?
Probleme kann das auf jeden Fall geben. Es ist bestimmt keine schlechte Idee, die Datei nach dem Öffnen für andere Zugriffe zu sperren, siehe flock() (http://www.php.net/manual/en/function.flock.php).
Oder sind die Zeilenumbrüche das Werk von Geister in der Maschine, die durch zufällige Codesegmente hervorgerufen werden???
Auch das halte ich für durchaus möglich - ich empfehle den PC-Exorzisten deines Vertrauens (http://www.gelbe-seiten.de).
Oder würdet ihr die Textdatei anders aufbauen?
Zumindest würde ich den wegzuschreibenden String aufbauen, bevor ich die Datei öffne, damit die Datei nicht länger als nötig geöffnet bleibt.
Gruß,
Andreas.
Hallo Andreas
Vielen Dank für deine Tipps! Ich werde sie ausprobieren und hoffe, dass sie meinem Problem Abhilfe verschaffen.
Grüsse
sroto