Buongiorno a tutti, ho un piccolo problema con l'utilizzo di flock:
Ho due script php, il primo si occupa di ricevere delle stringhe e appenderle in un file. Il secondo riceve delle richieste di lettura del file, invia come risposta il suo contenuto e dopodichè elimina il file.
Per evitare collisioni utilizzo la funzione flock in entrambi gli script.
Copio e incollo il codice del secondo script per spiegare il problema. I commenti dovrebbero essere chiari.
Ho due script php, il primo si occupa di ricevere delle stringhe e appenderle in un file. Il secondo riceve delle richieste di lettura del file, invia come risposta il suo contenuto e dopodichè elimina il file.
Per evitare collisioni utilizzo la funzione flock in entrambi gli script.
Copio e incollo il codice del secondo script per spiegare il problema. I commenti dovrebbero essere chiari.
PHP:
<?php
$fid = fopen($filename, "r");
flock($fid, LOCK_EX); // blocco il file in modo che il primo script vuole appendere dei dati, rimane in coda e attende.
$file = fread($fid, filesize($filename));
echo $file; // invio come risposta il contenuto del file
// ora che tutti i dati sono stati letti dal client, devo cancellare il file
// in modo che la prossima volta che viene chiamato questo script non vi siano dati da inviare nuovamente
flock($fid, LOCK_UN); // ma per cancellare il file devo prima rimuovere il blocco
fclose( $fid );
// a questo punto il file è sbloccato e il primo script che era in coda appende una nuova stringa
unlink($filename); //cancello il file e purtroppo perdo la nuova stringa che è stata appesa dal primo script
// per evitare questo problema dovrei potere cancellare il file prima di sbloccarlo, in modo che il primo script, invece di appendere la stringa
// al file corrente ne crea uno nuovo e non perdo nessun dato
?>
Ultima modifica di un moderatore: