Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Справочник PHP

flock

Блокирует файл, чтобы с ним не работали два процесса одновременно.

Синтаксис

flock(resource $stream, int $operation, int &$would_block = null): bool

Параметры

ПараметрТипОписание
$streamresourceОткрытый файл.
$operationint`LOCK_SH` — для чтения, `LOCK_EX` — для записи, `LOCK_UN` — снять.
$would_blockintНеобязательный. Признак того, что блокировку пришлось бы ждать.

Возвращаемое значение

bool`true`, если блокировка получена.

Примеры

Счётчик, защищённый блокировкой:

<?php
 
$file = sys_get_temp_dir() . '/ref-counter.txt';
file_put_contents($file, '41');
 
$handle = fopen($file, 'c+');
flock($handle, LOCK_EX);
 
$count = (int) fread($handle, 20) + 1;
ftruncate($handle, 0);
rewind($handle);
fwrite($handle, (string) $count);
 
flock($handle, LOCK_UN);
fclose($handle);
 
echo file_get_contents($file);

Результат:

42

Примечания

Без блокировки два одновременных запроса прочитают одно и то же значение и один из них потеряется. Для простой записи есть file_put_contents($file, $data, LOCK_EX).

См. также

  • fopen — Открывает файл для чтения или записи по частям.
  • fwrite — Записывает строку в открытый файл.
  • file_put_contents — Записывает данные в файл.

В учебнике

  • Чтение и запись файлов — Работа с файлами в PHP — запись, чтение, дозапись, чтение по строкам, проверка существования и удаление.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.