filetype
fnmatch
Fonctions sur les systèmes de fichiers
PHP Manual

# flock

(PHP 4, PHP 5)

flock — Verrouille le fichier

### Description

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

flock() permet de réaliser un système simple de verrous écriture/lecture, qui peut être utilisé sur n'importe quelle plate-forme (Unix et Windows compris).

Le verrou est également levé avec la fonction fclose() (qui est également automatiquement appelée lors de la fin du script).

PHP dispose d'un système complet de verrouillage de fichiers. Tous les programmes qui accèdent au fichier doivent utiliser la même méthode de verrouillage pour qu'il soit efficace. Par défaut, cette fonction se bloquera tant que le verrou demandé ne sera pas acquis ; ce comportement peut être contrôlé (sur les systèmes différents de Windows) avec l'option `LOCK_NB` dont vous trouverez la documentation ci-dessous.

### Liste de paramètres

`handle`

  Un pointeur de fichier ouvert.

`operation`

  `operation` peut prendre une des valeurs suivantes :

  - `LOCK_SH` pour acquérir un verrou partagé (lecture).
  - `LOCK_EX` pour acquérir un verrou exclusif (écriture).
  - `LOCK_UN` pour libérer un verrou (partagé ou exclusif).

  Il est également possible d'ajouter `LOCK_NB` comme masque d'une des opérations précédentes si vous ne voulez pas que la fonction flock() bloque durant le verrouillage. (non supporté sous Windows)

`wouldblock`

  Ce troisième argument optionnel est défini à `TRUE` si le verrou doit bloquer le script (condition d'erreur EWOULDBLOCK) (non supporté sous Windows).

### Valeurs de retour

Cette fonction retourne `TRUE` en cas de succès ou `FALSE` si une erreur survient.

### Historique

Version | Description
--- | ---
5.3.2 | Le déverrouillage automatique lorsque la ressource de fichiers est fermée a été supprimée. Le déverrouillage doit maintenant être effectuée manuellement.
4.0.1 | Les constantes LOCK_XXX ont été ajoutées. Avant, vous deviez utiliser 1 pour `LOCK_SH`, 2 pour `LOCK_EX`, 3 pour `LOCK_UN` et 4 pour `LOCK_NB`

### Exemples

Exemple #1 Exemple avec flock()

`<?php
$fp = fopen("/tmp/lock.txt", "r+");
if (flock($fp, LOCK_EX)) { // pose un verrou exclusif
ftruncate($fp, 0); // effacement du contenu
fwrite($fp, "Écrire dans un fichier\n");
flock($fp, LOCK_UN); // libère le verrou
} else {
echo "Impossible de verrouiller le fichier !";
}
fclose($fp);
?>`

Exemple #2 Exemple avec flock() en utilisant l'option `LOCK_NB`

`<?php
$fp = fopen('/tmp/lock.txt', 'r+');
/* Activation de l'option LOCK_NB lors d'une opération LOCK_EX */
if(!flock($fp, LOCK_EX | LOCK_NB)) {
echo 'Impossible d\'obtenir le verrou';
exit(-1);
}
/* ... */
fclose($fp);
?>`

### Notes

> Note: flock() est obligatoire sous Windows ainsi que sous quelques systèmes basés sur POSIX.

> Note: Comme flock() requiert un pointeur de fichier, vous aurez peut être à utiliser un verrou spécial pour protéger l'accès au fichier que vous voulez tronquer en l'ouvrant en mode d'écriture (avec "w" ou "w+" comme argument de fopen()).

Avertissement

Assigner une autre valeur à l'argument `handle` dans ce code libèrera le verrou.

Avertissement

Sur certains systèmes d'exploitation, flock() est implémenté au niveau processus. Lorsque vous utilisez une API multithread comme ISAPI, vous risquez de ne pas pouvoir avoir confiance en flock() pour protéger vos fichiers contre d'autres scripts PHP qui fonctionnent en parallèle sur d'autres threads du même serveur.

flock() n'est pas supporté sur les vieux systèmes de fichiers comme FAT et ses dérivés, et elle retournera forcément `FALSE` sous ces environnements (ceci est particulièrement vrai pour les utilisateurs de Windows 98).

filetype
fnmatch
Fonctions sur les systèmes de fichiers
PHP Manual