En utilisant php, comment insérer du texte sans écraser le début d'un fichier texte

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

  •  01-07-2019
  •  | 
  •  

Question

j'ai:

<?php

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

if (

j'ai:

<*>

mais il écrase le début du fichier. Comment puis-je l'insérer?

POST["lastname"] <> "") { fwrite($file,

j'ai:

<*>

mais il écrase le début du fichier. Comment puis-je l'insérer?

POST["lastname"]."\n"); } fclose($file); ?>

mais il écrase le début du fichier. Comment puis-je l'insérer?

Était-ce utile?

La solution

Je ne suis pas tout à fait sûr de votre question. Voulez-vous écrire des données sans les écraser au début d'un fichier existant ou écrire de nouvelles données au début d'un fichier existant, en conservant le contenu existant après ça?

Pour insérer du texte sans écraser le début du fichier , vous devez l'ouvrir pour l'ajout ( a + plutôt que r + )

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

if (

Je ne suis pas tout à fait sûr de votre question. Voulez-vous écrire des données sans les écraser au début d'un fichier existant ou écrire de nouvelles données au début d'un fichier existant, en conservant le contenu existant après ça?

Pour insérer du texte sans écraser le début du fichier , vous devez l'ouvrir pour l'ajout ( a + plutôt que r + )

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

Si vous essayez d'écrire au début du fichier , vous devez lire le contenu du fichier (voir file_get_contents ) d’abord, puis écrivez votre nouvelle chaîne suivie du contenu du fichier dans le fichier de sortie.

<*>

L'approche ci-dessus fonctionnera avec de petits fichiers, mais vous pouvez vous heurter à des limites de mémoire pour essayer de lire un fichier volumineux avec file_get_conents . Dans ce cas, envisagez d'utiliser rembobiner ($ fichier) , qui définit le fichier. indicateur de position pour le traitement au début du flux de fichiers. Remarque lors de l'utilisation de rewind () , ne pas ouvrir le fichier avec les options a (ou a + ), tels que:

  

Si vous avez ouvert le fichier en mode ajout ("a" ou "a +"), toutes les données que vous écrivez dans le fichier seront toujours ajoutées, quelle que soit leur position.

POST["lastname"] <> "") { fwrite($file,

Je ne suis pas tout à fait sûr de votre question. Voulez-vous écrire des données sans les écraser au début d'un fichier existant ou écrire de nouvelles données au début d'un fichier existant, en conservant le contenu existant après ça?

Pour insérer du texte sans écraser le début du fichier , vous devez l'ouvrir pour l'ajout ( a + plutôt que r + )

<*>

Si vous essayez d'écrire au début du fichier , vous devez lire le contenu du fichier (voir file_get_contents ) d’abord, puis écrivez votre nouvelle chaîne suivie du contenu du fichier dans le fichier de sortie.

<*>

L'approche ci-dessus fonctionnera avec de petits fichiers, mais vous pouvez vous heurter à des limites de mémoire pour essayer de lire un fichier volumineux avec file_get_conents . Dans ce cas, envisagez d'utiliser rembobiner ($ fichier) , qui définit le fichier. indicateur de position pour le traitement au début du flux de fichiers. Remarque lors de l'utilisation de rewind () , ne pas ouvrir le fichier avec les options a (ou a + ), tels que:

  

Si vous avez ouvert le fichier en mode ajout ("a" ou "a +"), toutes les données que vous écrivez dans le fichier seront toujours ajoutées, quelle que soit leur position.

POST["lastname"]."\n"); } fclose($file);

Si vous essayez d'écrire au début du fichier , vous devez lire le contenu du fichier (voir file_get_contents ) d’abord, puis écrivez votre nouvelle chaîne suivie du contenu du fichier dans le fichier de sortie.

<*>

L'approche ci-dessus fonctionnera avec de petits fichiers, mais vous pouvez vous heurter à des limites de mémoire pour essayer de lire un fichier volumineux avec file_get_conents . Dans ce cas, envisagez d'utiliser rembobiner ($ fichier) , qui définit le fichier. indicateur de position pour le traitement au début du flux de fichiers. Remarque lors de l'utilisation de rewind () , ne pas ouvrir le fichier avec les options a (ou a + ), tels que:

  

Si vous avez ouvert le fichier en mode ajout ("a" ou "a +"), toutes les données que vous écrivez dans le fichier seront toujours ajoutées, quelle que soit leur position.

Autres conseils

Un exemple de travail pour insérer au milieu d'un flux de fichiers sans écraser ni charger le tout dans une variable / mémoire:

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

La bibliothèque de compositeurs est disponible ici

Vous obtenez la même ouverture du fichier pour l'ajout

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

Vous obtenez la même ouverture du fichier pour l'ajout

<*>POST["lastname"] <> "") { fwrite($file,

Vous obtenez la même ouverture du fichier pour l'ajout

<*>POST["lastname"]."\n"); } fclose($file); ?>

Si vous voulez mettre votre texte au début du fichier, vous devez d'abord lire le contenu du fichier comme suit:

<?php

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

if (

Si vous voulez mettre votre texte au début du fichier, vous devez d'abord lire le contenu du fichier comme suit:

<*>POST["lastname"] <> "") { $existingText = file_get_contents($file); fwrite($file, $existingText .

Si vous voulez mettre votre texte au début du fichier, vous devez d'abord lire le contenu du fichier comme suit:

<*>POST["lastname"]."\n"); } fclose($file); ?>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top