Wie kann ich mit file_put_contents() mit FILE_APPEND | LOCK_EX Sicherheit?

Ich bin mit:

file_put_contents("peopleList.txt", $person, FILE_APPEND | LOCK_EX);

schreiben an das Ende einer Datei und stellen Sie sicher, dass niemand sonst (oder ein Skript), ist auch das schreiben auf die gleiche Datei zur gleichen Zeit.

Den PHP-Handbuch sagt wird es wieder ein falsy-Wert, wenn nicht erfolgreich.

Wenn es nicht erhalten kann eine Sperre auf die Datei, wird es nicht oder halten Sie versuchen, bis Sie es können? Wenn es scheitert, wenn keine Sperre abgerufen werden kann, was wäre der beste Weg um sicherzustellen, dass die Daten geschrieben werden?

Vielleicht Schleifen die Funktion in einer while-Schleife, bis es nicht return false (kriechen) oder einfach die Bereitstellung der Benutzer (website visiter) mit irgendeiner Art von GUI anfordern, werden Sie es wieder versuchen?

  • Apache erzeugt einen thread, in dem ein PHP-Prozess ausgeführt wird. Mehrere Benutzer = mehrere PHP-Prozesse. Der Prozess, erwarb das Schloss ist die einzige, die erlaubt, mit der Datei arbeiten. Alle anderen Prozesse erhalten eine Fehlermeldung, die von file_put_contents Funktion und file_put_contents ausgestellt durch den Nutzer nicht alles schreiben, was in die Datei. Das bedeutet, dass während der 1 user schreibt, der andere verwehrt wird, und die Funktion gibt boolean false.
  • Grund, warum LOCK_EX vorhanden ist, ist ein ganz anderes Thema. Wenn Sie schreiben möchten, um die Datei unabhängig, entfernen Sie einfach das LOCK_EX, da Sie es nicht brauchen, und die Letzte person, die Zugriff auf Ihre website/Skript wird derjenige sein, der die Daten in die Datei geschrieben. Auch, weil du tust Anhängen - was ist der Punkt, der das sperren der Datei überhaupt? Entfernen Sie es einfach.
  • Ich bin mit LOCK_EX und FILE_APPEND zusammen, da die anderen Skripte die Möglichkeit haben, zu schreiben in die Datei und ich weiß nicht, was Sie in der Lage sein, während Daten angehängt und Umgekehrt.
  • Nicht alle Skripte Anhängen von Daten an die Datei?
  • Nein, einige überschreiben und einige werden nur gelesen.
  • Wenn Sie wirklich brauchen, eine Sperre für eine Datei zum schreiben am Ende ist es vielleicht besser, speichern Sie diese Daten in mysql und habe einfach jedem neuen schreiben eine neue Zeile und combind die Schreibvorgänge in einer einzigen doc. Auf diese Weise werden Sie nicht haben, lock-Fehlern. Aber ich will auch die Frage beantworten.

InformationsquelleAutor hozza | 2012-01-19
Schreibe einen Kommentar