Используйте указатель на файл в режиме вставки, а не перезаписи в PHP

#php-7 #file-manipulation

#php-7 #манипулирование файлами

Вопрос:

Я заметил, что в PHP (7.x), когда вы записываете в файл, он перезаписывает любые существующие символы. Например,

 $file = fopen("test.txt", "r ");

/* test.txt contains
abc123
*/

fwrite($file, "~");

/* test.txt now contains
~bc123
*/

fclose($file);
 

Это простой пример — я мог бы сохранить все содержимое файла, повторно открыть в режиме записи, ввести ~ , ввести сохраненное содержимое, готово — но мой файл станет большим (имеется в виду переменный размер), и он содержит несколько записей, а не только одну, как в этом примере.

Я хочу что-то вроде этого:

 $file = fopen("test.txt", "ir "); // insert mode r 

/* test.txt contains
abc123
*/

fwrite($file, "~");

/* test.txt now contains
~abc123
*/

fclose($file);
 

Есть ли способ сделать это?

Комментарии:

1. сначала прочитайте содержимое файла, затем вы объединяете «~» с содержимым файла и записываете его с помощью fwrite($file, «~».$file_content);

2. @JackSparrow: как я уже сказал в своем вопросе, я не смогу этого сделать, потому что мой файл больше, чем в этом примере. Я не хочу использовать это решение, потому что по мере увеличения файла он в конечном итоге станет слишком большим для этого. Я использую это для проекта, и в тот момент, когда он станет слишком большим, никто больше не сможет его использовать. Это может даже привести к сбою. Итак, я ищу ответ, который может выполнить эту операцию, не беспокоясь о пространстве памяти или о чем-либо подобном.

3. вы можете читать большие файлы построчно как буфер определенного размера с помощью fgets(). Затем вы можете изменить буфер строки так, как вам нужно, в соответствии с вашим вопросом, и записать буфер в ту же строку.