Перейти к содержимому

flock()

Что такое функция flock()?

Функция flock() — это встроенная функция PHP, которая позволяет реализовать простой механизм блокировки файлов. Она используется для предотвращения одновременного доступа нескольких процессов к одному и тому же файлу. Обратите внимание, что на системах семейства Unix flock() использует рекомендательную (advisory) блокировку, тогда как в Windows применяется обязательная (mandatory) блокировка.

Ниже приведён базовый синтаксис функции flock():

Синтаксис flock() в PHP

php
flock($stream, $operation, $wouldblock = null): bool

Где $stream — это указатель на файл, возвращаемый функцией fopen(), $operation — тип блокировки, которую необходимо применить, а $wouldblock — необязательный параметр, принимающий значение true, если блокировка заблокирует выполнение. Функция возвращает true при успехе или false при ошибке.

Как использовать функцию flock()?

Использование функции flock() довольно просто. Следуйте приведённым ниже шагам:

  1. Откройте файл, который нужно заблокировать, с помощью функции fopen().
  2. Вызовите функцию flock(), передав ей указатель на файл и тип необходимой блокировки.
  3. Выполните необходимые операции с файлом.
  4. По завершении работы снимите блокировку с помощью flock($file, LOCK_UN).

Ниже приведён пример кода, демонстрирующий использование функции flock():

Как использовать функцию flock()?

php
<?php

$filename = 'myfile.txt';
$file = fopen($filename, 'r+');
if ($file !== false) {
    if (flock($file, LOCK_EX)) {
        // Perform operations on the file
        flock($file, LOCK_UN);
    } else {
        echo "Unable to obtain lock on file!";
    }
    fclose($file);
}
?>

В этом примере мы открываем файл myfile.txt с помощью функции fopen() и применяем эксклюзивную блокировку через функцию flock(). Затем выполняем некоторые операции с файлом и снимаем блокировку с помощью LOCK_UN. К распространённым константам блокировки относятся LOCK_SH (разделяемая блокировка), LOCK_EX (эксклюзивная блокировка) и LOCK_NB (блокировка без ожидания, которую можно комбинировать с LOCK_SH или LOCK_EX с помощью побитового ИЛИ).

Заключение

Функция flock() — это полезный инструмент в PHP для выполнения операций блокировки файлов. Следуя шагам, описанным в данном руководстве, вы сможете легко использовать функцию flock() в своих PHP-проектах для предотвращения одновременного доступа нескольких процессов к одному файлу.

Практика

Какова функция flock() в PHP?

Считаете ли это полезным?

Предпросмотр dual-run — сравните с маршрутами Symfony на продакшене.