[Php-it] Sincronizzare l'accesso a un file

Gianluca Baù gianluca at ihuri.it
Mon Jun 5 12:44:45 CEST 2006


> Ciao,
>
>> ho una script che ha parecchi accessi contemporanei via web. Questa 
>> script deve, ad ogni accesso, scrivere delle cose su un file di testo.
>> Ho bisogno di gestire la concorrenza nell'accesso a questo file.
>>
>> Voi come fareste ?
>>
>> <code>
>> while ( !flock(param) )
>>    continue;
>>
>> $fp = fopen(params);
>>
>> etc...
>> </code>
>
>
> Questo non serve a nulla, flock prende un file pointer come 
> parametro... Che devi fare sul file esattamente?
>
>
> Ciao ciao


Ciao,
intendevo una cosa del genere

<code>
$tentativi = 100;

$file_path = $_SERVER['DOCUMENT_ROOT'] . "/inc.php";

/* Apro il file per la lettura */
$fp = fopen($file_path, "r");

while ( !flock($fp, LOCK_SH) && $tentativi != 0 )
{
    /* Decremento i tentativi possibili */
    $tentativi--;
}

/* Leggo il contenuto del file */
$content = fread($fp, filesize($file_path));

/* Rilascio il lock */
flock($fp, LOCK_UN);

/* Chiudo il file */
fclose($fp);

[.....]

/* Apro il file per la scrittura */
$fp = fopen($file_path, "w");

while ( !flock($fp, LOCK_EX) && $tentativi != 0 )
{
    /* Decremento i tentativi possibili */
    $tentativi--;
}

/* Riscrivo il file con il numero del sito successivo */
fwrite($fp, "ROBA DA SCRIVERE");

/* Rilascio il lock */
flock($fp, LOCK_UN);

/* Chiudo il file */
fclose($fp);
</code>

Mi suggerireste anche come aprire il file in lettura + scrittura con 
relativo lock ?
Qui faccio due operazioni distinte per leggere e scrivere, ma un 
passaggio del genere è sbagliato perchè nel momento in cui ho letto 
qualcun'altro potrebbe scrivere!!!
E poi è giusto il fatto dei tentativi nei cicli?
Se non si riesce mai acquisire il lock, per qualunque motivo la script 
non terminerebbe mai.

Aspetto suggerimenti :)

Saluti


More information about the Php-it mailing list