varios valores txt texto mostrar manejo linea leer etiquetas especifica escribir ejemplos con archivos archivo php insert

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

Composer lib para ello se puede encontrar aquí