flock
Блокирует файл, чтобы с ним не работали два процесса одновременно.
Синтаксис
flock(resource $stream, int $operation, int &$would_block = null): boolПараметры
| Параметр | Тип | Описание |
|---|---|---|
| $stream | resource | Открытый файл. |
| $operation | int | `LOCK_SH` — для чтения, `LOCK_EX` — для записи, `LOCK_UN` — снять. |
| $would_block | int | Необязательный. Признак того, что блокировку пришлось бы ждать. |
Возвращаемое значение
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 — запись, чтение, дозапись, чтение по строкам, проверка существования и удаление.