Il Senario:
Hai un file con una stringa (valore medio della frase) su ogni riga. Per amor di se, diciamo che questo file ha una dimensione di 1 Mb (migliaia di righe).
Hai uno script che legge il file, cambia alcune delle stringhe all'interno del documento (non solo aggiungendo ma anche rimuovendo e modificando alcune righe) e quindi sovrascrive tutti i dati con i nuovi dati.
Le domande:
PHP, OS o httpd ecc. Del server dispongono già di sistemi per bloccare problemi come questo (leggere / scrivere a metà di una scrittura)?
In tal caso, spiegare come funziona e fornire esempi o collegamenti alla documentazione pertinente.
In caso contrario, ci sono cose che posso abilitare o configurare, come bloccare un file fino al completamento di una scrittura e far fallire tutte le altre letture e / o scritture fino al termine della scrittura dello script precedente?
I miei presupposti e altre informazioni:
Il server in questione esegue PHP e Apache o Lighttpd.
Se lo script viene chiamato da un utente ed è a metà della scrittura sul file e un altro utente legge il file in quel preciso momento. L'utente che lo legge non otterrà l'intero documento, poiché non è stato ancora scritto. (Se questo presupposto è sbagliato, per favore correggimi)
Mi occupo solo della scrittura e della lettura di PHP in un file di testo, e in particolare delle funzioni "fopen" / "fwrite" e principalmente "file_put_contents". Ho esaminato la documentazione "file_put_contents" ma non ho trovato il livello di dettaglio o una buona spiegazione di cosa sia o faccia il flag "LOCK_EX".
Lo scenario è un esempio di uno scenario peggiore in cui presumo che questi problemi abbiano maggiori probabilità di verificarsi, a causa delle grandi dimensioni del file e del modo in cui i dati vengono modificati. Voglio saperne di più su questi problemi e non voglio né ho bisogno di risposte o commenti come "usa mysql" o "perché lo stai facendo" perché non lo sto facendo, voglio solo imparare a leggere / scrivere i file con PHP e non sembra che stia cercando nei posti / documentazione giusti e sì, capisco che PHP non è il linguaggio perfetto per lavorare con i file in questo modo.
file_put_contents()
è solo un involucro per la fopen()/fwrite()
danza, LOCKEX
fa lo stesso come se chiamassi flock($handle, LOCKEX)
.