У меня есть функция, которая получает имя файла и объект json для записи в текстовый файл.
Объект обновляется и должен полностью заменить текущее содержимое файла. У каждого посетителя сайта есть свой файл. Несколько быстрых изменений создают ситуацию, когда файл усекается на fopen(file,w+)
, а затем не записывается так, как он заблокирован. Конечный результат - пустой файл.
Я уверен, что есть стандартный простой способ сделать это, поскольку это такая обычная деятельность. Идеально, что я ищу, это способ проверить, заблокирован ли файл перед усечением файла с помощью fopen
в w+
или способом переключения режимов.
Кажется странным, что вам нужно будет обрезать файл с помощью fopen()
, чтобы получить дескриптор файла, чтобы перейти к flock()
, чтобы проверить, заблокирован ли он, но вы просто усекали его, так что точка?
Здесь функция, которую я имею до сих пор:
function updateFile($filename, $jsonFileData) {
$fp = fopen($filename,"w+");
if (flock($fp, LOCK_EX)) {
fwrite($fp, $jsonFileData);
flock($fp, LOCK_UN);
fclose($fp);
return true;
} else {
fclose($fp);
return false;
}
}