Это код, который я написал некоторое время назад, чтобы удалить строку из файла, его нужно изменить.Кроме того, он будет работать правильно, если новая строка короче старой, для более длинных строк потребуется серьезная модификация.
Ключ - второй цикл while, в котором все содержимое файла после измененияперезаписывается в правильной позиции в файле.
<?php
$size = filesize('test.txt');
$file = fopen('test.txt', 'r+');
$lineToDelete = 3;
$counter = 1;
while ($counter < $lineToDelete) {
fgets($file); // skip
$counter++;
}
$position = ftell($file);
$lineToRemove = fgets($file);
$bufferSize = strlen($lineToRemove);
while ($newLine = fread($file, $bufferSize)) {
fseek($file, $position, SEEK_SET);
fwrite($file, $newLine);
$position = ftell($file);
fseek($file, $bufferSize, SEEK_CUR);
}
ftruncate($file, $size - $bufferSize);
echo 'Done';
fclose($file);
?>