Sto studiando il mecanismo del branco in PHP e sto avendo difficoltà a capire la funzionalità della modalità LOCK_SH. Ho letto su un sito che blocca il file in modo che altri script non possano scrivere in esso, ma possono leggere da esso. Tuttavia il seguente codice non sembra funzionare come previsto: In file1.php ho:Come funziona LOCK_SH?
$fp = fopen('my_file.txt','r');
flock($fp, LOCK_SH);
sleep(20);
flock($fp, LOCK_UN);
E in file2.php ho
$fp = fopen('my_file.txt','a');
fwrite($fp,'test');
corro il primo script che blocca il file per 20 secondi. Con il lock in atto, eseguo file2.php che termina la sua esecuzione all'istante e dopo che ho aperto 'my_file.txt' la stringa 'test' è stata aggiunta ad essa (anche se 'file1.php' era ancora in esecuzione). Provo a cambiare 'file2.php' in modo che possa leggere dal file bloccato e che sia rosso senza problemi. Quindi apparentemente ... le cuciture "LOCK_SH" non fanno nulla. Tuttavia, se uso LOCK_EX sì, blocca il file, nessuno script può scrivere o leggere dal file. Sto usando Easy PHP ed eseguendolo sotto Windows 7.
capisco ora. Ho testato il meccanismo che hai spiegato e ha funzionato senza problemi. Sei il migliore. –