fwrite — Какой самый эффективный способ чтения, а затем перезаписи содержимого файла в php?

Я хочу прочитать файл в строку, изменить содержимое и записать обработанную строку в файл.
Кроме того, другой запрос к серверу может начаться слишком рано и попытаться записать тот же файл до того, как первый будет завершен — что НИКОГДА не должно происходить (пока я использую flock) — было бы еще лучше, если бы скрипт блокировался до замок снят.

Вот какой-то неполный подход

$h = fopen($fp, 'a+');
flock($h, LOCK_EX);
$oTxt = '';
while (!feof($file)) {
$oTxt .= fread($h, 8192);
}
rewind($h);
ftruncate($h, 0)
fwrite($h, );    // process contents and write it back
flock($h, LOCK_UN);
fclose($h);

Примечание: этот вопрос очень похож на Как лучше всего читать и затем перезаписывать содержимое файла в php? (в моем случае это файл json, я хочу декодировать, вставить или отредактировать какой-то узел, затем закодировать его снова), но это не дубликат.

1

Решение

Вы можете заменить while цикл с одним вызовом stream_get_contents, И вы должны использовать режим r+ читать и писать файл; a+ при запуске будет размещать поток в конце файла, поэтому читать нечего.

$h = fopen($fp, 'r+');
flock($h, LOCK_EX);
$oTxt = stream_get_contents($h);
// Process contents
rewind($h);
ftruncate($h, 0);
fwrite($h, $oTxt);
flock($h, LOCK_UN);
fclose($h);
2

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

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

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