Wenn Sie in PHP in eine Datei schreiben, wird das Ende dieser vorhandenen Datei geschrieben.
Wie stellen wir eine Datei voran, die am Anfang dieser Datei geschrieben werden soll?
Ich habe versucht rewind($handle) Funktion, scheint aber zu überschreiben, wenn der aktuelle Inhalt größer als der vorhandene ist.
Irgendwelche Ideen?
Ein unschöner Weg wäre, den Dateiinhalt zu lesen, alles voranzustellen, was Sie haben, und die gesamte Datei neu zu schreiben. Nicht sicher, ob es einen anderen Weg gibt. Wenn Sie eine kleine Änderung an einer großen Datei vornehmen, ist dies nicht gerade “leicht”, aber wenn Sie an einer kleinen Datei mit 100 Zeichen arbeiten, ist dies in Ordnung.
– Warzig
26. Juli 2010 um 4:50 Uhr
Möglicherweise möchten Sie dies mit UNIX-Tools tun, wenn dies möglich ist: stackoverflow.com/questions/54365/…
Alex gibt es eine Korrektur $fileContents = file_get_contents($file);
– Mathew
26. Juli 2010 um 5:05 Uhr
Alex, noch eine Frage … wenn dies eine große Datei ist, kann das Lesen/Schreiben länger dauern, oder?
– Mathew
26. Juli 2010 um 5:08 Uhr
Wenn die Datei riesig ist, können Sie immer Streams (z. B. fread und fwrite) und eine temporäre Datei verwenden.
– GWW
26. Juli 2010 um 5:12 Uhr
@matthew Es kann sein. Die Dokumente sagen wir anrufen file_put_contents() ist identisch mit der Verwendung fopen() und ähnliches. Wenn die Leistung zu einem Problem wird, können Sie jederzeit den Vorschlag von Deceze prüfen (in den Kommentaren zu Ihrer Frage).
– Alex
26. Juli 2010 um 5:18 Uhr
Die file_get_contents-Lösung ist für große Dateien ineffizient. Diese Lösung kann länger dauern, abhängig von der Datenmenge, die vorangestellt werden muss (mehr ist tatsächlich besser), verbraucht jedoch keinen Speicherplatz.
file_get_contents()Dokumente sagt Folgendes: “… ist die bevorzugte Methode, um den Inhalt einer Datei in eine Zeichenfolge einzulesen. Es verwendet Speicherzuordnungstechniken, wenn dies von Ihrem Betriebssystem unterstützt wird, um die Leistung zu verbessern.”
– Alex
26. Juli 2010 um 5:45 Uhr
@alex Es bedeutet immer noch, dass das Ganze auf einmal in den Speicher gelesen wird. Fraxtils Methode verwendet sehr wenig Speicher, aber viele Schritte. Es hängt von den Umständen ab, was effizienter ist …
– verzeihen ♦
26. Juli 2010 um 5:49 Uhr
Vielen Dank!! es funktioniert Ich war etwas besorgt über file_get_contents
– Mathew
26. Juli 2010 um 6:21 Uhr
Wenn ich das richtig interpretiere, macht dies tatsächlich eine Dateikopie mit einem Präpend. Die Schritte hängen jedoch stark von der Größe der vorangestellten Zeichenfolge ab. Einfachstes Beispiel: Ein vorangestellter String der Größe 1 (dh: ‘X’) würde 1024 Schritte für eine 1-kb-Datei benötigen. Das ist für kleinere Saiten nicht ganz akzeptabel. Auch gibt es eine verpasste Chance für a do { .. } while();bauen 🙂
Dadurch wird eine Leerzeile in die Textdatei eingefügt, sodass Sie beim nächsten Schreiben die Leerzeile ersetzen. mit einer Leerzeile und Ihrem String.
Das ist der einzige und beste Trick.
Erstens wird dies nicht vorangestellt, sondern überschrieben. Noch wichtiger ist, dass /n ein Zeilenumbruchzeichen einfügt (es gibt keine Leerzeile), sodass Sie höchstens 1 Zeichen überschreiben könnten. Dies ist eine so schlechte Antwort, dass ich nicht sagen kann, ob Sie trollen.
– Michael Whinfrey
29. April 2019 um 22:17 Uhr
Erstens wird dies nicht vorangestellt, sondern überschrieben. Noch wichtiger ist, dass /n ein Zeilenumbruchzeichen einfügt (es gibt keine Leerzeile), sodass Sie höchstens 1 Zeichen überschreiben könnten. Dies ist eine so schlechte Antwort, dass ich nicht sagen kann, ob Sie trollen.
– Michael Whinfrey
29. April 2019 um 22:17 Uhr
10016800cookie-checkWie stelle ich eine Datei dem Anfang voran?yes
Ein unschöner Weg wäre, den Dateiinhalt zu lesen, alles voranzustellen, was Sie haben, und die gesamte Datei neu zu schreiben. Nicht sicher, ob es einen anderen Weg gibt. Wenn Sie eine kleine Änderung an einer großen Datei vornehmen, ist dies nicht gerade “leicht”, aber wenn Sie an einer kleinen Datei mit 100 Zeichen arbeiten, ist dies in Ordnung.
– Warzig
26. Juli 2010 um 4:50 Uhr
Möglicherweise möchten Sie dies mit UNIX-Tools tun, wenn dies möglich ist: stackoverflow.com/questions/54365/…
– verzeihen
♦
26. Juli 2010 um 5:04 Uhr