fopen — PHP заменяет строку вверху текстового файла на fgets

Я хотел бы использовать php, чтобы открыть файл и заменить только одну строку, которая будет в верхней части. Поскольку он находится ближе к началу, я не хочу читать весь файл в память. Вот то, что я тестировал, но я думаю, что я не понимаю, как вернуть пробел через строку, как только я идентифицирую это с помощью strpos ():

<?php

$file = "test-file.php";
$new_value = "colors:orange green violet;";
$fhandle = fopen($file, "r+") or die("Unable to open file!");
$replaced = "false";

while ($replaced === "false") {
$line = fgets($fhandle);
if (strpos($line, "colors:")) {   //find the colors line
//Should I be moving the file pointer back here?
//Once I find the line, how do I clear it?
$line = $new_value;
fputs($fhandle, $line);
$replaced = "true";
}
}
fclose($fhandle);
?>

Содержимое test-file.php:

 fruit:apples bananas;
colors:red blue green;
cars:ford chevy;

Примечание. Каждая строка в test-file.php заканчивается точкой с запятой.

0

Решение

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

Вам не нужно читать все это в памяти все сразу. fgets() подход позволяет вам читать только строку за раз. Наименее ресурсоемкий способ сделать это — записать все значения в новый файл, а затем удалить (unlink()) старый файл и rename() новый файл со старым именем файла.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]