Der Senario:
Sie haben eine Datei mit einer Zeichenfolge (durchschnittlicher Satzwert) in jeder Zeile. Nehmen wir an, diese Datei hat eine Größe von 1 MB (Tausende von Zeilen).
Sie haben ein Skript, das die Datei liest, einige der Zeichenfolgen im Dokument ändert (nicht nur einige Zeilen anfügt, sondern auch entfernt und ändert) und dann alle Daten mit den neuen Daten überschreibt.
Die Fragen:
Verfügt PHP, OS oder httpd usw. des Servers bereits über Systeme, um solche Probleme zu stoppen (Lesen / Schreiben nach der Hälfte des Schreibvorgangs)?
Wenn ja, erklären Sie bitte, wie es funktioniert, und geben Sie Beispiele oder Links zu relevanten Dokumentationen.
Wenn nicht, gibt es Dinge, die ich aktivieren oder einrichten kann, z. B. das Sperren einer Datei, bis ein Schreibvorgang abgeschlossen ist, und das Fehlschlagen aller anderen Lese- und / oder Schreibvorgänge, bis das vorherige Skript den Schreibvorgang abgeschlossen hat?
Meine Annahmen und andere Informationen:
Auf dem betreffenden Server werden PHP und Apache oder Lighttpd ausgeführt.
Wenn das Skript von einem Benutzer aufgerufen wird und sich in der Mitte des Schreibens in die Datei befindet und ein anderer Benutzer die Datei genau zu diesem Zeitpunkt liest. Der Benutzer, der es liest, erhält nicht das vollständige Dokument, da es noch nicht geschrieben wurde. (Wenn diese Annahme falsch ist, korrigieren Sie mich bitte)
Ich beschäftige mich nur mit dem Schreiben und Lesen von PHP in eine Textdatei, insbesondere mit den Funktionen "fopen" / "fwrite" und hauptsächlich "file_put_contents". Ich habe mir die Dokumentation "file_put_contents" angesehen, aber weder den Detaillierungsgrad noch eine gute Erklärung dafür gefunden, was das "LOCK_EX" -Flag ist oder tut.
Das Szenario ist ein Beispiel für ein Worst-Case-Szenario, bei dem ich davon ausgehen würde, dass diese Probleme aufgrund der Größe der Datei und der Art und Weise, wie die Daten bearbeitet werden, mit größerer Wahrscheinlichkeit auftreten. Ich möchte mehr über diese Probleme erfahren und möchte oder brauche keine Antworten oder Kommentare wie "benutze MySQL" oder "Warum machst du das?", Weil ich das nicht mache. Ich möchte nur etwas über das Lesen / Schreiben von Dateien lernen mit PHP und scheinen nicht an den richtigen Stellen / in der richtigen Dokumentation zu suchen und ja, ich verstehe, dass PHP nicht die perfekte Sprache ist, um auf diese Weise mit Dateien zu arbeiten.
file_put_contents()
ist nur ein Wrapper für den fopen()/fwrite()
Tanz, LOCKEX
macht das gleiche, als ob Sie anrufen würden flock($handle, LOCKEX)
.