Forum und email

flock

(PHP 4, PHP 5)

flock — Portable op advies gebaseerde bestands blokkering

Beschrijving

bool flock ( resource $handle , int $operation [, int $&wouldblock ] )

PHP ondersteunt een portable manier van het blokkeren van complete bestanden op een geadviseerde manier (wat betekent dat alle programma's die toegang vragen dezelfde manier van blokkeren moeten gebruiken, omdat het anders niet werkt).

flock() werkt op handle die naar een geopend bestand moet verwijzen. operation is een van de volgende waardes:

  • Om een gedeelde blokkering te krijgen (lezer), zet operation op LOCK_SH (op 1 voor versies eerder dan PHP 4.0.1).
  • Om een exclusieve blokkering te krijgen (schrijver), zet operation op LOCK_EX (op 2 voor versies eerder dan PHP 4.0.1).
  • Om een gedeelde of exclusieve blokkering op te heffen, zet operation op LOCK_UN (op 3 voor versies eerder dan PHP 4.0.1).
  • Als je wilt dat flock() niet tegenhoudt terwijl je blokkeerd, voeg LOCK_NB (4 voor versies eerder dan PHP 4.0.1) toe aan operation .

flock() maakt het mogelijk om een simpel lezer/schrijven model te maken die op bijna elk platform gebruikt kan worden (inclusief Unix aftakkingen en zelfs Windows). De optionele derde parameter wordt op TRUE gezet als de blokkeringen zal tegenhouden (EWOULDBLOCK error).

Geeft TRUE terug bij succes, FALSE indien er een fout is opgetreden.

Example#1 flock() example

<?php

$fp 
fopen("/tmp/lock.txt""w+");

if (
flock($fpLOCK_EX)) { // do an exclusive lock
    
fwrite($fp"Write something here\n");
    
flock($fpLOCK_UN); // release the lock
} else {
    echo 
"Couldn't lock the file !";
}

fclose($fp);

?>

Note: Omdat flock() een bestands pointer nodig heeft, is het waarschijnlijk nodig om een speciale blokkerings bestand aan te maken om toegang tot een bestand dat je wilt openen in schrijf modus (met een "w" of "w+" argument in fopen()) te beveilign.

Warning

flock() werkt niet op een NFS en vele andere netwerk bestands systemen. Controleer je systeems documentatie voor meer details.

Op sommige systemen is flock() geïmplementeerd op proces hoogte. Wanneer je dan een multithreaded server API gebruikt zoals ISAPI, dan kan je er mogelijk niet van uitgaan dat flock() bestanden beschermd van andere PHP scripts die in parallele threads draaien op dezelfde server instantie!

flock() is niet ondersteund op verouderde bestands systemen zoals FAT en zijn aftakkingen en zal daarom altijd FALSE terug geven in die omgevingen (dit is voornamelijk waar voor Windows 98 gebruikers).