Christoph Zurnieden: Daten im TXT-File werden überschrieben

Beitrag lesen

Hi,

Ich möchte, dass jede neue Zeile im txt-file oben über dem inhalt geschrieben wird.
Stattdessen habe ich immer nur eine Zeile mit den letzten Daten im txt-file.

Das ist auch korrekt so:

$inhalt = fopen("log.txt", "r+");
fputs($inhalt, "$newline\n");
fclose($inhalt);

Wie hier angegeben ("r+") steht der Dateizeiger an der Position 0 der Datei, also direkt am Anfang. Am Rest hat sich nichts bewegt, also wird überschrieben.
Wie machst Du es denn im Editor, wenn Du eine Zeile an den Anfang anfügen möchtest?
Mit dem Cursor an den Anfang und die Zeile einfügen. Der ganze Rest wandert dann nach unten, ist demnach vom Anfang um genausoviel weiter entfernt, wie die eingefügte Zeile lang ist. Und genau so mußt Du es auch hier machen:

  
$ip = $_SERVER['REMOTE_ADDR'];  
$datum = date("d.m.Y H:i:s ");  
$newline = $datum . $ip."\n";  
  
$logfile = "log.txt";  
// Öffnen der Datei zum Schreiben und Lesen  
// Dateizeiger steht auf Anfang  
// wenn sie nicht existiert gibt's einen Fehler  
$fp      = fopen($logfile, "r+");  
// Einlesen der kompletten Datei in eine Variable  
$str     = fread($fp, filesize ($logfile));  
echo "str:" . $str . "<br>";  
// Setzen der neuen Zeile vor den ganzen Rest  
$out     = $newline.$str;  
echo "out:" . $out . "<br>";  
// Blockieren der Schreibzugriffe für alle anderen  
// auf die Logdatei.  
flock($fp,2);  
// Stellen des Dateizeigers auf den Anfang  
fseek ($fp, 0,"SEEK_SET");  
// Ausgabe des Dateiinhaltes  
// fputs() setzt automatisch ein Zeilenendezeichen  
fputs($fp, "$out");  
// Freigabe der Schreibblockade  
// (Nein, meine lieben Schriftsteller, das funktioniert  
//  nicht bei euch)  
flock($fp,3);  
// Aufräumen  
fclose($fp);  

Obiger Code ist _nur_ zur Veranschaulichung und _nicht_ für den produktiven Einsatz geeignet!

so short

Christoph Zurnieden