Fonction flock

La fonction flock pose ou retire un verrou sur un fichier. Son premier paramètre est un pointeur de fichier, obtenu via fopen, son deuxième paramètre est le type de verrou (LOCK_SH, LOCK_EX ou LOCK_UN), et son troisième paramètre optionnel est un drapeau pour une opération non bloquante.

Syntaxe

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

Exemple

Verrouillage de fichier pour un accès exclusif (écriture) :

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

Exemple

Verrou partagé pour la lecture :

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;
?>

Exemple

Tentative de capture de verrou non bloquante :

php<?php
  $file = fopen("data.txt", "c+");
  if (flock($file, LOCK_EX | LOCK_NB, $would_block)) {
    if ($would_block) {
      echo "File is locked by another process";
    } else {
      fwrite($file, "Data");
      flock($file, LOCK_UN);
    }
  }
  fclose($file);
?>

Voir aussi

  • la fonction fopen,
    qui ouvre un fichier
  • la fonction fclose,
    qui ferme un fichier
  • la fonction is_writable,
    qui vérifie la possibilité d'écriture