flock

(PHP 4, PHP 5, PHP 7, PHP 8)

flock — Портоване консультативне блокування файлів

Опис

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

flock() дозволяє здійснити просту модель читання/запису, яка може бути використана практично на будь-якій платформі (включаючи більшість варіантів Unix та навіть Windows).

Блокування також знімається за допомогою fclose()или когдаstream збирається збирачем сміття.

PHP підтримує портований спосіб консультативного блокування (advisory locking) повністю всього файлу (що означає, що всі програми, що здійснюють доступ до файлу, повинні використовувати той самий спосіб блокування, інакше блокування не буде працювати). За замовчуванням ця функція чекатиме на отримання блокування; цю поведінку можна змінити за допомогою наведеного нижче параметра LOCK_NB

Список параметрів

stream

Вказівник (resource) на файл, який зазвичай створюється за допомогою функції fopen()

operation

operation може приймати такі значення:

  • **LOCK_SH**для отримання блокування, що розділяється (читання).
  • **LOCK_EX**для отримання ексклюзивного блокування (запис).
  • **LOCK_UN**для зняття блокування (розділюваного або ексклюзивного).

Також можна додати константу LOCK_NB як бітова маска до будь-якої з вищевказаних операцій, якщо flock() не повинна блокуватись під час спроби блокування.

would_block

Необов'язковий третій параметр буде встановлено в 1, якщо блокування буде блокуючим (код помилки EWOULDBLOCK).

Значення, що повертаються

Повертає true у разі успішного виконання або **false**в случае возникновения ошибки.

Приклади

Приклад #1 Приклад використання функції flock()****

Loading...

Приклад #2 Использованиеflock()с параметромLOCK_NB****

Loading...

Примітки

Зауваження :

В Windowsflock() використовує обов'язкове (mandatory) блокування замість консультативного. Обов'язкове блокування також підтримується на Linux та операційних системах, заснованих на System V за допомогою стандартного механізму, який надає системний виклик fcntl(): тобто шуканий файл повинен мати встановлений біт доступу setgid та невстановлений біт групового виконання. Для коректної роботи цієї схеми в Linux файлова система також повинна бути змонтована з опцією mand.

Зауваження :

Через те, що функції flock() необхідний покажчик на файл, вам може знадобитися скористатися спеціальним замикаючим файлом для того, щоб обмежити доступ до файлу, який ви маєте намір очищати, шляхом його відкриття в режимі запису (використовуючи "w" або "w+" як аргумент функції) fopen()

Зауваження :

Може використовуватись лише на дескрипторах локальних файлів, повернутих функцією fopen(), або файлових дескрипторах користувача потоків, що реалізують метод streamWrapper::stream_lock()

Увага

Присвоение другого значения аргументуstreamв последующем коде отменит существующую блокировку.

Увага

У деяких операційних системах flock() реалізовано лише на рівні процесів. При використанні багатопотокових серверних API, таких як ISAPI, ви не можете покладатися на flock() для захисту ваших файлів від інших PHP-скриптів, які працюють у паралельному потоці на тому самому сервері!

flock() не підтримується на старих файлових системах на зразок FAT та її похідних, так що завжди буде повертати false у цих оточеннях.

Зауваження :

У Windows, якщо процес блокування відкриває файл вдруге, він не може отримати доступ до файлу через другий дескриптор, доки він не розблокує файл.