Ответ 1
Пример # 1 из Руководство по PHP будет делать то, что вы хотите, с небольшими изменениями. Используйте "c"
mode, чтобы открыть файл для записи, создать его, если он не существует, и не обрезать его.
$fp = fopen("/tmp/lock.txt", "c");
if (flock($fp, LOCK_EX)) { // acquire an exclusive lock
ftruncate($fp, 0); // truncate file
fwrite($fp, "Write something here\n");
fflush($fp); // flush output before releasing the lock
flock($fp, LOCK_UN); // release the lock
} else {
echo "Couldn't get the lock!";
}
fclose($fp);
Полное описание режима "c"
:
Откройте файл для записи. Если файл не существует, он создается. Если он существует, он не усекается (в отличие от "w" ), и вызов этой функции не выполняется (как в случае с "x" ). Указатель файла расположен в начале файла. Это может быть полезно, если требуется получить консультативную блокировку (см.
flock()
), прежде чем пытаться изменить файл, так как использование w обрезать файл до того, как была получена блокировка (если требуется усечение, ftruncate() можно использовать после запроса блокировки).
Это не похоже, что вам это нужно, но также есть соответствующий режим "c+"
, если вы хотите читать и писать.