Functie flock

De functie flock stelt een bestandsvergrendeling in of wordt deze opgeheven. Als eerste parameter accepteert het een aanwijzer naar een bestand, verkregen via fopen, als tweede parameter het type vergrendeling (LOCK_SH, LOCK_EX of LOCK_UN), en als derde optionele parameter een vlag voor een niet-blokkerende operatie.

Syntaxis

phpflock(resource $handle, int $operation, int &$would_block = null): bool

Voorbeeld

Bestand vergrendelen voor exclusieve toegang (schrijven):

php<?php
  $file = fopen("data.txt", "c+");
  if (flock($file, LOCK_EX)) {
    ftruncate($file, 0);
    fwrite($file, "Nieuwe data");
    flock($file, LOCK_UN);
  }
  fclose($file);
?>

Voorbeeld

Gedeelde vergrendeling voor lezen:

php<?php
  $file = fopen("data.txt", "r");
  if (flock($file, LOCK_SH)) {
    $content = fread($file, filesize("data.txt"));
    flock($file, LOCK_UN);
  }
  fclose($file);
  echo $content;
?>

Voorbeeld

Niet-blokkerende poging om een vergrendeling te verkrijgen:

php<?php
  $file = fopen("data.txt", "c+");
  if (flock($file, LOCK_EX | LOCK_NB, $would_block)) {
    if ($would_block) {
      echo "Bestand is vergrendeld door een ander proces";
    } else {
      fwrite($file, "Data");
      flock($file, LOCK_UN);
    }
  }
  fclose($file);
?>

Zie ook

  • de functie fopen,
    die een bestand opent
  • de functie fclose,
    die een bestand sluit
  • de functie is_writable,
    die de schrijfbaarheid controleert