[PHP] accès qu système de fichier et vérouillage de fichiers (flock)

accès qu système de fichier et vérouillage de fichiers (flock) [PHP] - PHP - Programmation

Marsh Posté le 18-12-2002 à 12:46:44    

Bonjour,
 
j'ai besoin de vos lumières à propos du verrouillage de fichiers. Si j'ai bien compris la chose, une instance d'un script peut se réserver l'accès exclusif à un ficher. D'autres instances de ce script ou d'autres scripts en cours d'exécution au même moment ne pourront donc pas y accéder. Mes questions sont :
1. quelle est la différence entre un verrou dit "exclusif" et un verrou "normal" (c-a-d entre operation=1 et operation=2 dans l'aide de la commande flock())
2. Que signifie ceci : "Si vous voulez que flock() ne se bloque pas durant le verrouillage, ajoutez 4 à operation." ?
3. qu'advient-il à un script qui tente d'accéder à un fichier verrouillé ? Il meurt avec un "Can't access..." ? il attends sa libération ?  
4. On est bien d'accord que l'interêt principal de la chose est de verrouiller un fichier lorsque l'on souhaite écrire dedans. La lecture d'un fichier simultanément par plusieurs processus ne pose pas de problème, hein ?
 
merci d'avance !

Reply

Marsh Posté le 18-12-2002 à 12:46:44   

Reply

Marsh Posté le 18-12-2002 à 12:53:20    

flock() operates on fp which must be an open file pointer. operation is one of the following values:  
 
 
 
To acquire a shared lock (reader), set operation to LOCK_SH (set to 1 prior to PHP 4.0.1).  
 
To acquire an exclusive lock (writer), set operation to LOCK_EX (set to 2 prior to PHP 4.0.1).  
 
To release a lock (shared or exclusive), set operation to LOCK_UN (set to 3 prior to PHP 4.0.1).  
 
If you don't want flock() to block while locking, add LOCK_NB (4 prior to PHP 4.0.1) to operation.

Reply

Marsh Posté le 18-12-2002 à 12:55:27    

About LOCK_NB
 
The document on the LOCK_NB flag isn't exactly thorough.  I decided to experiment with it a bit anf this is what I've been able to assertain as to it's function.
 
The default behaviour for flock is that if it can't aquire a lock on a file pointer, it will wait until the other process has finished with the file and reliquinahed it's lock and it is then able to retain one itself.  If this doesn't happen, the script will timeout.  
 
If you set the LOCK_NB flag then flock will not wait if it cannot get a lock immideately and will exit, returning false.  You will have to handle the error yourself if you do this but it will prevent the timeouts that normally occur if you're running a script that tries to lock a file that's already been locked and for which the lock won't be released any time soon.

Reply

Marsh Posté le 18-12-2002 à 13:07:47    

il faut un jour que je me décide à ne plus lire que les docs en anglais ! :D
 
alors ce que je ne comprends pas : j'ouvre un fichier. je le locke (exclusif). kk1 d'autre l'ouvre et essaye de le locker, il n'y arrive pas (->FALSE si LOCK_NB, wait sinon puis timeout le cas échéant).
 
comment ce-fait-ce que je puisse ouvrir le fichier même si il est locké ? C'est à dire : pourquoi on ne locke pas un fichier AVANT de l'ouvrir ? Autrement dit encore : si mon 2ème script essaye de lire dans un fichier locké sans chercher à obtenir un lock lui même que se passe-t'il :??:
 
le timeout : combien :??:  
 
 
merci joce ! :D

Reply

Marsh Posté le 18-12-2002 à 13:14:29    

méga rien à voir, je viens de découvrir ça :  
 
http://www.w3schools.com/
 
 
c'est génial ! :D

Reply

Marsh Posté le 18-12-2002 à 15:22:34    

minusplus a écrit :

il faut un jour que je me décide à ne plus lire que les docs en anglais ! :D
 
alors ce que je ne comprends pas : j'ouvre un fichier. je le locke (exclusif). kk1 d'autre l'ouvre et essaye de le locker, il n'y arrive pas (->FALSE si LOCK_NB, wait sinon puis timeout le cas échéant).
 
comment ce-fait-ce que je puisse ouvrir le fichier même si il est locké ? C'est à dire : pourquoi on ne locke pas un fichier AVANT de l'ouvrir ? Autrement dit encore : si mon 2ème script essaye de lire dans un fichier locké sans chercher à obtenir un lock lui même que se passe-t'il :??:
le timeout : combien :??:  
 
 
merci joce ! :D

a mon avis tu te fais jeter :D

Reply

Marsh Posté le 18-12-2002 à 15:50:11    

joce a écrit :

a mon avis tu te fais jeter :D

pkoi tu personnalise le problème comme ça tout de suite ! :D  
 
 
[My Life - continued...] je viens de découvrir le XML, c'est génial aussi :D

Reply

Marsh Posté le 18-12-2002 à 17:16:55    

Bonne chance si tu veux des réponses. J'ai passé 1 semaine à la recherche d'infos sur cette fn l'été dernier et je n'ai tjrs pas de réponse.
M'enfin si un boss de la fn flock() arrivait les réponses aux questions de minusplus m'intéressent aussi.

Reply

Marsh Posté le 18-12-2002 à 17:26:58    

AH ! les grands esprits se rencontrent sur Prog ! :D
 
 
bon ben en attendant, my-life-continued : c'est con que le Perl soit pas plus répandu comme langage pour le web OU que php n'aie pas toutes les libs de Perl...  :whistle: :D

Reply

Marsh Posté le 18-12-2002 à 19:45:46    

Ma solution --> utiliser MySQL comme ça t po emmerdé avec les fichiers textes ;).


Message édité par Dost67 le 18-12-2002 à 19:46:01
Reply

Marsh Posté le 18-12-2002 à 19:45:46   

Reply

Marsh Posté le 19-12-2002 à 11:15:15    

wé je m'en doute mais moi je voudrais bien utiliser le système de fichier ! :D :o

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed