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

bool flock (resource $ handle. int $ operation [, int $ Wouldblock])

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

У версіях PHP до 5.3.2 блокування звільнялася також викликом функції fclose () (яка також викликається автоматично по завершенні скрипта).

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

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

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

operation може набувати таких значень:
  • LOCK_SH для отримання розділяється блокування (читання).
  • LOCK_EX для отримання ексклюзивної блокування (запис).
  • LOCK_UN для зняття блокування (розділяється або ексклюзивної).

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

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

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

Повертає TRUE у разі успішного завершення або FALSE в разі виникнення помилки.

Примітки

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

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

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

Присвоєння іншого значення аргументу handle в подальшому коді скасує існуючу блокування.

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

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