En utilisant php, comment insérer du texte sans écraser le début d'un fichier texte
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?
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
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);
?>