Zeilenumbruch file_put_contents funktioniert nicht?
Hallo, will mittels file_put_conents in eine txt-datei schreiben. wenn ich jedoch einen Zeilenumbruch erstelle, kommt folgende Fehlermeldung:
Parse error: syntax error, unexpected fully qualified name "\r\n", expecting ")" in X:\web\u\...\schreiben.php on line 9
Code:
<?php
$zeit = $_POST["zeit"];
$kombiniert = $time . " " . $zeit;
$file = "user.txt";
$time = date("d/m/y");
$zeile = "Erfolgreich.";
file_put_contents($file, $kombiniert, FILE_APPEND | LOCK_EX \r\n);
echo "Wurde eingeschrieben.";
?>
Was mache ich falsch? Der neuste soll immer ganz oben stehen und alles in einer datei.
3 Antworten
Hi axelred5,
das kann man sehr leicht realisieren. Ich habe für dich eine angepasste Version gebastalt, zudem habe ich deinen Fehler behoben. In der Variable $kombiniert werden Werte und Variablen verkettet, aber die Variable $time wird erst unten deklariert und daher kann man nichts verketten, was es vorher noch nicht gibt. Daher solltest du zuerst $time deklarieren und dann die Verkettung darunter machen. Hier ist ein angepasstes Beispiel von mir:
<?php
$zeit = $_POST['zeit'];
$time = date("d/m/y");
$kombiniert = $time . " " . $zeit;
$file = "user.txt";
// Letzen Einträge lesen
$altinhalt = file_exists($file) ? file_get_contents($file) : "";
// Neuer und alter Inhalt verbinden
$neuerInhalt = $kombiniert . $altinhalt;
// Datei mit neuer Reihenfolge speichern
file_put_contents($file, $neuerInhalt, LOCK_EX);
?>
Viel Erfolg
Wird aber trotzdem nebeneinander angezeigt, der print funktioniert aber es ist ohne zeilenumbruch
Sorry, hab ich vergessen PHP_EOL anzuhängen am Anfang. Wenn du also am Ende deiner Verkettung es anhängst, dann wird automatisch am Ende ein Zeilenende hinzugefügt das unabhängig vom Betriebssystem funktioniert. Hier meine Korrektur:
$kombiniert = PHP_EOL . $time . " " . $zeit . PHP_EOL;
Wenn noch Fehler das sein sollen, einfach hier posten!
perfekt, das funktioniert. Nächstes problem ist: ich hab das ganze einmal gemacht, kein problem. Beim 2. Mal wurde das ganze doppelt geprintet. Und ist es irgendwie möglich das ganze nur einmal am Tag zu machen?
Vielleicht hab ich auch die Funktionssignatur falsch im Kopf, aber was hat das /r/n dort zu suchen, wo es aktuell ist?
Eigentlich sollte es doch an die zu schreibenden Daten angehängt werden, entweder vorher:
$kombiniert .= "/r/n";
Oder direkt im Funktionsaufruf:
file_put_contents($file, $kombiniert . "/r/n", FILE_APPEND | LOCK_EX);
In beiden Fällen kannst du auch alternativ die Konstante PHP_EOL benutzen, die automatisch die richtige Zeilenendung für das aktuelle System liefert.
$kombiniert .= PHP_EOL;
Was mache ich falsch?
Du kannst nicht zählen.
Der Fehler passiert in Zeile 9, du hast nur 7.
perfekt, Dankeschön! 🙏🏻