valores - Usando php, cómo insertar texto sin sobrescribir al principio de un archivo de texto
leer y mostrar archivo de texto en php (4)
Yo tengo:
<?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);
?>
pero sobrescribe el comienzo del archivo. ¿Cómo lo hago insertar?
Obtienes lo mismo abriendo el archivo para agregar
<?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);
?>
Si quiere poner su texto al principio del archivo, primero deberá leer el contenido del archivo como:
<?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);
?>
No estoy del todo seguro de su pregunta: ¿desea escribir datos y no tener que sobrescribir el comienzo de un archivo existente, o escribir datos nuevos al comienzo de un archivo existente, manteniendo el contenido existente después de él?
Para insertar texto sin sobreescribir el comienzo del archivo , deberá abrirlo para agregarlo ( a+
lugar de 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);
Si intenta escribir al principio del archivo , primero tendrá que leer el contenido del archivo (consulte file_get_contents
), luego escriba la nueva cadena seguida de los contenidos del archivo en el archivo de salida.
$old_content = file_get_contents($file);
fwrite($file, $new_content."/n".$old_content);
El enfoque anterior funcionará con archivos pequeños, pero puede encontrarse con límites de memoria tratando de leer un archivo grande al usar file_get_conents
. En este caso, considere usar rewind($file)
, que establece el indicador de posición del archivo para handle al comienzo de la secuencia de archivos. Tenga en cuenta cuando use rewind()
, no para abrir el archivo con las opciones a (o a+
), como:
Si ha abierto el archivo en el modo de adición ("a" o "a +"), los datos que escriba en el archivo siempre se anexarán, independientemente de la posición del archivo.
Un ejemplo de trabajo para insertar en medio de una secuencia de archivos sin sobreescribir, y sin tener que cargar todo en una variable / memoria:
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