Использование php, как вставить текст без перезаписи в начало текстового файла

У меня есть:

<?php $file=fopen(date("Ymd").".txt","r+") or exit("Unable to open file!"); if ($_POST["lastname"] <> "") { fwrite($file,$_POST["lastname"]."\n"); } fclose($file); ?> 

но он перезаписывает начало файла. Как его вставить?

Я не совсем уверен в вашем вопросе – хотите ли вы писать данные и не переписывать начало существующего файла или записывать новые данные в начало существующего файла, сохраняя при этом существующий контент?

Чтобы вставить текст без перезаписи начала файла , вам нужно будет открыть его для добавления ( a+ а не r+ )

 $file=fopen(date("Ymd").".txt","a+") or exit("Unable to open file!"); if ($_POST["lastname"] <> "") { fwrite($file,$_POST["lastname"]."\n"); } fclose($file); 

Если вы пытаетесь записать в начало файла , сначала вам нужно будет прочитать содержимое файла (см. file_get_contents ), а затем записать новую строку, а затем содержимое файла в выходной файл.

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

Вышеупомянутый подход будет работать с небольшими файлами, но вы можете столкнуться с ограничениями памяти, пытаясь прочитать большой файл с использованием file_get_conents . В этом случае рассмотрите возможность использования rewind($file) , который устанавливает индикатор позиции файла для дескриптора в начало потока файлов. Обратите внимание, что при использовании функции rewind() , чтобы не открывать файл с параметрами a (или a+ ), выполните следующие действия:

Если вы открыли файл в режиме append («a» или «a +»), любые данные, которые вы записываете в файл, всегда будут добавляться независимо от положения файла.

Рабочий пример для вставки в середине потока файлов без перезаписи и без необходимости загружать все это в переменную / память:

 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 для него можно найти здесь

Вы получаете то же самое открытие файла для добавления

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

Если вы хотите поместить текст в начало файла, вам сначала необходимо прочитать содержимое файла, например:

 <?php $file=fopen(date("Ymd").".txt","r+") or exit("Unable to open file!"); if ($_POST["lastname"] <> "") { $existingText = file_get_contents($file); fwrite($file, $existingText . $_POST["lastname"]."\n"); } fclose($file); ?>