flock
(PHP 4, PHP 5)
flock — Verrouille le fichier
Description
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.
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).
- LOCK_NB si vous voulez que flock() ne se bloque pas 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).
Valeurs de retour
Cette fonction retourne TRUE en cas de succ�s, FALSE en cas d'�chec.
Historique
Version | Description |
---|---|
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", "w");
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);
?>
Notes
Note: flock() est obligatoire sous Windows.
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()).
flock() ne fonctionne pas sur NFS ou sur les autres syst�mes de fichiers r�seaux. V�rifiez la documentation de votre syst�me d'exploitation pour plus de d�tails.
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).