Новые данные всегда записываются в конец файла, потому что по умолчанию операции записи файлов в языке PHP открывают файл в режиме "прикрепления" (append mode), который позволяет добавлять данные в конец файла без удаления существующего содержимого.
Чтобы правильно обновить строку в файловой базе данных с использованием функции fgets(), вам понадобится выполнить следующие шаги:
1. Открыть файл в режиме чтения и записи с помощью функции fopen(). Например:
```php
$file = fopen('database.txt', 'r+');
```
2. Прочитать содержимое файла построчно, используя функцию fgets(). При этом необходимо сохранить позицию указателя файла, чтобы знать, на какой строке находится обрабатываемая запись. Например:
```php
$lineNumber = 0;
while (!feof($file)) {
$line = fgets($file);
$lineNumber++;
// Добавьте ваш код для обработки строки здесь
}
```
3. При обработке нужной строки выполните необходимые изменения.
4. С помощью функции fseek() переместите указатель файла на позицию начала строки, которую вы хотите обновить. Например:
```php
fseek($file, $startPosition);
```
5. Используйте функцию fwrite() для записи обновленной строки в файл. Например:
```php
fwrite($file, $updatedLine);
```
6. Закройте файл, вызвав функцию fclose(). Например:
```php
fclose($file);
```
Что касается второго вопроса, да, вы можете считать содержимое файла в массив с помощью функции file() и манипулировать элементами массива, а затем перезаписать файл с использованием функции file_put_contents(). Например:
```php
$fileLines = file('database.txt');
// Модифицируйте элементы массива $fileLines по необходимости
$newFileContent = implode('', $fileLines);
file_put_contents('database.txt', $newFileContent);
```
Однако следует обратить внимание, что при таком подходе весь файл будет целиком загружен в память, поэтому это может быть неэффективно для больших файлов. Использование функции fgets() с обработкой строк по одной может быть предпочтительным для больших файлов или если вам нужно изменить только определенные строки в файле.