(PHP 3 >= 3.0.7, PHP 4, PHP 5)
flock -- Sistema di bloccaggio file
Descrizione
bool
flock ( resource handle, int operation [, int &wouldblock] )
Il PHP supporta un tecnologia portabile per bloccare file completi in modalità
advisory (tutti i programmi che vi accedono, devono usare lo stesso tipo di
bloccaggio o non funzionerà).
Nota:
flock()è obbligatorio sotto Windows.
flock() opera su handle
che deve essere un puntatore ad un file aperto.
operation può assumere uno dei valori
seguenti:
Per acquisire una chiave condivisa (in lettura), imposta
operation a LOCK_SH (usa 1 prima di
PHP 4.0.1).
Per acquisire una chiave esclusiva (in scrittura), imposta
operation a LOCK_EX (usa 2 prima di
PHP 4.0.1).
Per rilasciare una chiave (condivisa o esclusiva), imposta
operation a LOCK_UN (usa 3 prima
PHP 4.0.1).
Se non vuoi che flock() blocchi mentre,
imposta come LOCK_NB (4 prima di PHP 4.0.1)
operation.
flock() ti permette di utilizzare un semplice modello di
lettura/scrittura che in teoria può essere usato su qualsiasi piattaforma
(inclusi molti sistemi Unix e anche Windows). Il terzo argomento (opzionale)
può essere impostato a TRUE se la chiave puo bloccare (EWOULDBLOCK
errno condition). Il blocco è realizzato anche da fclose()
(che è anche richiamata automaticamente quando lo script termina).
Restituisce TRUE in caso di successo, FALSE in caso di fallimento.
Esempio 1. Esempio di uso di flock()
<?php $fp = fopen("/tmp/lock.txt", "w+"); if (flock($fp, LOCK_EX)) { // Esegue un lock esclusivo fwrite($fp, "Write something here\n"); flock($fp, LOCK_UN); // rilascia il lock } else { echo "Non si riesce ad eseguire il lock del file !"; } fclose($fp); ?>
|
|
Nota:
Poiché flock() richiede il puntatore ad un file, può occorre
utilizzare un speciale file di lock per proteggere l'accesso a eventuali file che si desidera
azzerare attraverso l'apertura in modalità di scrittura (usando "w" o "w+" come argomento
di fopen()).
Avvertimento |
La funzione flock() non funzione con NFS e con diversi altri file system
di rete. Verificare sulla documentazione del proprio sistema operativo.
Su molti sistemi operativi flock() è implementato a livello
di processo. Usando un server API multithread quale
ISAPI non potrai basarti su flock() per proteggere
i file da altri script PHP che girino in thread paralleli della stessa istanza
del server!
La funzione flock() non è supportata su file system antiquati tipo
FAT e i suoi derivati e pertanto in tali ambienti restituirà sempre
FALSE (questo è vero soprattutto per gli utenti di
Windows 98).
|