Heim >Backend-Entwicklung >PHP-Tutorial >Lassen Sie uns über PHP-Dateisperren, gemeinsame Sperren und exklusive Sperren sprechen.
Es gibt zwei Arten von Dateisperren: gemeinsame Sperren und exklusive Sperren, also Lesesperren (LOCK_SH) und Schreibsperren (LOCK_EX)
Dateisperren werden im Allgemeinen wie folgt verwendet:
$fp = fopen("filename", "a"); flock($fp, LOCK_SH) or die("lock error") $str = fread($fp, 1024); flock($fp, LOCK_UN); fclose($fp);
Beachten Sie, dass die Datei nach fwrite sofort aktualisiert wird, anstatt auf fwrite und dann fclose zu warten, bevor die Datei aktualisiert wird. Dies kann überprüft werden, indem die Datei nach fwrite, aber vor fclose gelesen wird
Aber wann um lock_ex zu verwenden und wann Was ist mit der Verwendung von lock_sh?
Beim Lesen:
Wenn Sie nicht möchten, dass schmutzige Daten angezeigt werden, verwenden Sie am besten die gemeinsame Sperre lock_sh. Die folgenden drei Situationen können berücksichtigt werden:
1. Wenn beim Lesen keine gemeinsame Sperre hinzugefügt wird, ist der Schreibvorgang sofort erfolgreich, wenn andere Programme schreiben möchten (unabhängig davon, ob der Schreibvorgang gesperrt ist oder nicht). . Wenn genau die Hälfte davon gelesen und dann von einem anderen Programm geschrieben wird, stimmt die zweite Hälfte des Lesevorgangs möglicherweise nicht mit der ersten Hälfte überein (die erste Hälfte ist vor der Änderung und die zweite Hälfte ist nach der Änderung)
2 Wenn beim Lesen eine gemeinsame Sperre hinzugefügt wird (da nur gelesen wird, muss keine exklusive Sperre verwendet werden), beginnen zu diesem Zeitpunkt andere Programme mit dem Schreiben, und das schreibende Programm verwendet die Sperre nicht, dann das Schreiben Das Programm ändert die Datei direkt, was ebenfalls zur gleichen Situation wie zuvor führt. Das Problem besteht darin, beim Lesen zu sperren (lock_sh) und beim Schreiben zu sperren (lock_ex). Das Schreibprogramm wartet, bis das Leseprogramm abgeschlossen ist, bevor es ausgeführt wird.
Beim Schreiben:
Wenn mehrere Schreibprogramme gleichzeitig mit der Datei arbeiten, ohne sie zu sperren , dann kann ein Teil der endgültigen Daten von Programm a geschrieben werden, ein Teil davon wird von Programm b geschrieben
Wenn es beim Schreiben gesperrt ist und andere Programme zu diesem Zeitpunkt kommen, um es zu lesen, was wird es tun? lesen?
1. Wenn der Leser keine gemeinsame Sperre beantragt, liest er schmutzige Daten. Wenn Sie beispielsweise ein Programm schreiben, müssen Sie zu diesem Zeitpunkt die drei Teile a, b und c schreiben. Zu diesem Zeitpunkt ist das, was Sie lesen, abc.