Originariamente inviato da Fabio Heller
Ciao Guido,
con flock sei al sicuro solo se fai così
se usi apertura w+
1) apri un altro file fantoccio
2) lock del file fantoccio
3) apertura del file reale
4) lettura file reale
5) somma
6) scrittura file reale
7) chiusura file reale
8) unlock file fantoccio
9) chiusura fantoccio
Questo perchè 'w' cancella il contenuto del file prima del lock
se usi apertura r+ invece puoi fare così
1) apertura del file reale
2) lock del file reale
3) lettura file reale
4) somma
5) reset posizione puntatore
6) scrittura file reale
7) unlock file reale
8) chiusura file reale
questo perchè r+ non elimina il contenuto prima del lock
detto questo, ecco il codice di esempio:
codice:
// nome del file
$myfile = 'myfile.txt';
// apertura in r+ e lock del file
$fp = fopen($myfile, 'r+');
@flock($fp, LOCK_EX); // la @ è importante
// prendo il contenuto e resetto il file
$content = fread($fp, filesize($myfile));
rewind($fp);
// effettuo le modifiche al contenuto ...
// scrivo le modifiche
fwrite($fp, $newcontent);
// slocko e chiudo
@flock($fp, LOCK_UN); // la @ è importante
fclose($fp);
// se dovessi solo leggere invece farei semplicemente
$content = file_get_contents($myfile);