Mit PHP, wie Sie Text einfügen, ohne auf den Anfang einer Textdatei zu überschreiben

StackOverflow https://stackoverflow.com/questions/103593

  •  01-07-2019
  •  | 
  •  

Frage

ich habe:

<?php

$file=fopen(date("Y-m-d").".txt","r+") or exit("Unable to open file!");

if ($_POST["lastname"] <> "")
{
   fwrite($file,$_POST["lastname"]."\n");
}

fclose($file);

?>

, aber es überschreibt den Anfang der Datei. Wie kann ich es einsetzen machen?

War es hilfreich?

Lösung

Ich bin mir nicht ganz sicher, Ihrer Frage - tun Sie Daten schreiben möchten und es nicht den Anfang einer vorhandenen Datei überschreiben, oder schreiben neue Daten auf den Beginn einer bestehenden Datei, halten die vorhandenen Inhalte nach es?

Um den Text einzufügen, ohne Über Schreiben der Anfang der Datei , werden Sie es zum Anhängen ( a+ statt r+ )

$file=fopen(date("Y-m-d").".txt","a+") or exit("Unable to open file!");

if ($_POST["lastname"] <> "")
{
   fwrite($file,$_POST["lastname"]."\n");
}

fclose($file);

Wenn Sie versuchen, auf den Anfang der Datei zu schreiben, werden Sie in dem Dateiinhalt lesen (siehe file_get_contents ) zuerst, dann schreiben Sie Ihre neue Zeichenfolge von Dateiinhalt in die Ausgabedatei gefolgt.

$old_content = file_get_contents($file);
fwrite($file, $new_content."\n".$old_content);

Der obige Ansatz wird mit kleinen Dateien arbeiten, aber Sie können in den Speicher Grenzen laufen versuchen, sich mit der file_get_conents eine große Datei zu lesen. In diesem Fall sollten Sie mit rewind($file) , die den Dateipositionsindikator für Griff des Datei-Stream an den Anfang setzt . Beachten Sie, wenn rewind() verwendet, nicht die Datei mit dem a zu öffnen (oder a+) Optionen, wie:

  

Wenn Sie die Datei im Anfügen geöffnet haben ( „a“ oder „a +“) Modus, alle Daten, die in die Datei schreiben wird immer angehängt werden, unabhängig von der Dateiposition.

Andere Tipps

Ein Arbeitsbeispiel für ohne Überschreiben in der Mitte eines Dateistrom eingeführt wird, und ohne dass das Ganze in eine Variable / Speicher laden:

function finsert($handle, $string, $bufferSize = 16384) {
    $insertionPoint = ftell($handle);

    // Create a temp file to stream into
    $tempPath = tempnam(sys_get_temp_dir(), "file-chainer");
    $lastPartHandle = fopen($tempPath, "w+");

    // Read in everything from the insertion point and forward
    while (!feof($handle)) {
        fwrite($lastPartHandle, fread($handle, $bufferSize), $bufferSize);
    }

    // Rewind to the insertion point
    fseek($handle, $insertionPoint);

    // Rewind the temporary stream
    rewind($lastPartHandle);

    // Write back everything starting with the string to insert
    fwrite($handle, $string);
    while (!feof($lastPartHandle)) {
        fwrite($handle, fread($lastPartHandle, $bufferSize), $bufferSize);
    }

    // Close the last part handle and delete it
    fclose($lastPartHandle);
    unlink($tempPath);

    // Re-set pointer
    fseek($handle, $insertionPoint + strlen($string));
}

$handle = fopen("file.txt", "w+");
fwrite($handle, "foobar");
rewind($handle);
finsert($handle, "baz");

// File stream is now: bazfoobar

Komponist lib es hier werden kann

Sie erhalten die gleiche Datei zum Anhängen

Öffnen
<?php
$file=fopen(date("Y-m-d").".txt","a+") or exit("Unable to open file!");
if ($_POST["lastname"] <> "")
{
   fwrite($file,$_POST["lastname"]."\n");
}
fclose($file);
?>

Wenn Sie Ihren Text am Anfang der Datei setzen möchten, würden Sie den Inhalt der Datei lesen muss zuerst wie:

<?php

$file=fopen(date("Y-m-d").".txt","r+") or exit("Unable to open file!");

if ($_POST["lastname"] <> "")
{    
    $existingText = file_get_contents($file);
    fwrite($file, $existingText . $_POST["lastname"]."\n");
}

fclose($file);

?>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top