Wie stelle ich eine Datei dem Anfang voran?

Lesezeit: 4 Minuten

Wie stelle ich eine Datei dem Anfang voran
Mathew

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/…

    – verzeihen

    26. Juli 2010 um 5:04 Uhr

Wie stelle ich eine Datei dem Anfang voran
Alex

$prepend = 'prepend me please';

$file="/path/to/file";

$fileContents = file_get_contents($file);

file_put_contents($file, $prepend . $fileContents);

  • 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.

<?php

$cache_new = "Prepend this"; // this gets prepended
$file = "file.dat"; // the file to which $cache_new gets prepended

$handle = fopen($file, "r+");
$len = strlen($cache_new);
$final_len = filesize($file) + $len;
$cache_old = fread($handle, $len);
rewind($handle);
$i = 1;
while (ftell($handle) < $final_len) {
  fwrite($handle, $cache_new);
  $cache_new = $cache_old;
  $cache_old = fread($handle, $len);
  fseek($handle, $i * $len);
  $i++;
}
?>

  • 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 🙂

    – Scones

    16. April 2018 um 9:00 Uhr


1647263648 943 Wie stelle ich eine Datei dem Anfang voran
misima

$filename  = "log.txt";
$file_to_read = @fopen($filename, "r");
$old_text = @fread($file_to_read, 1024); // max 1024
@fclose(file_to_read);
$file_to_write = fopen($filename, "w");
fwrite($file_to_write, "new text".$old_text);

  • Mir gefällt die Kompaktheit

    – Cäsar

    8. Dezember 2013 um 7:53 Uhr

  • Was ist $fo und was ist $fow benutzt für?

    – bzeaman

    2. März 2016 um 21:27 Uhr

  • Ja, zuerst $fo ist $forSekunde $fo ist $fow muss sein

    – Misima

    13. Juli 2016 um 19:20 Uhr


Wie stelle ich eine Datei dem Anfang voran
DockeryZ

Wenn Sie fopen() verwenden, können Sie den Modus einstellen, um den Zeiger zu setzen (dh den Anfang oder das Ende.

$afile = fopen("file.txt", "r+");

‘r’ Nur zum Lesen öffnen; Setzen Sie den Dateizeiger an den Anfang der Datei.

‘r+’ Offen zum Lesen und Schreiben; Setzen Sie den Dateizeiger an den Anfang der Datei.

1647263649 851 Wie stelle ich eine Datei dem Anfang voran
Dillon Burnett

            $file = fopen('filepath.txt', 'r+') or die('Error');
            $txt = "/n".$string;
            fwrite($file, $txt);
            fclose($file);

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

1001680cookie-checkWie stelle ich eine Datei dem Anfang voran?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy