|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Apr 2005
Messaggi: 296
|
[PHP] Accesso esclusivo ai file
Ciao, non ho ben capito come si fa a fare in modo che uno script PHP acceda
ad un file in modo esclusivo, evitando che un'altro script vi acceda allo stesso tempo. Ho 2 pagine PHP pagina1 e pagina2 che accedono ad uno stesso file F, rispettivamente in lettura e scrittura. Se pagina1 legge F mentre pagina2 sta tentando di accedervi in scrittura, vorrei che pagina2 aspetti prima che la lettura sia finita, e viceversa. Ho guardato sui manuali come si usa la funzione flock, ma secondo me non funge perchè supponiamo che i due script siano fatti così : Codice:
PAGINA1 (lettura di F) $f = fopen(nomefile,"r"); flock($f,LOCK_SH); // leggi il file F flock($f,LOCK_UN); fclose($f); PAGINA2 (aggiornamento di F) $f = fopen(nomefile,"w"); flock($f,LOCK_EX); // scrivi sul file F flock($f,LOCK_UN); fclose($f); potrebbe succedere questo: Codice:
1) Il thread2 esegue $f = fopen(nomefile,"w"); e quindi tronca il file F che diventa un file vuoto 2) Il thread2 viene sospeso e il thread1 viene ripreso 3) Il thread1 apre il file F in lettura, chiama flock, ed esegue la lettura da F, quindi legge un file vuoto!! 4) Il thread1 sblocca il file con flock($f,LOCK_UN); 5) Il thread1 viene sospeso e il thread2 riprende l'esecuzione, locka il file, ed esegue la scrittura.. ecc. Io ho un server Apache 2.x sotto Windows e non so sinceramente se sia multithread, ma suppongo di si , e poi comunque ormai siamo nell'era del multicore e credo che tutte le nuove applicazioni abbiano più di un thread, figuriamoci un server http... Quindi come si può evitare il problema? ciao |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:10.