In diesem Artikel wird hauptsächlich der gleichzeitige Betrieb von PHP-Dateien erläutert. Die Standardeinstellung lautet: Die Dateibetriebsfunktion von PHP befindet sich nicht im Blockierzustand, sondern in einem freien Betriebszustand.
Bedingungen:
Wenn ein Skriptvorgang erforderlich ist und ein anderer Skriptvorgang blockiert werden muss, ist eine Dateisperre erforderlich.
Sperrvorgang:
Fügen Sie zuerst das Schloss hinzu, prüfen Sie, ob das Schloss erfolgreich hinzugefügt wurde, und verwenden Sie es erneut, wenn es erfolgreich ist!
Sperrtyp:
Lesesperre: S-Lock (Share-Lock) Shared Lock, die erwartete zusätzliche Sperre vor dem Lesevorgang. Dadurch sind gleichzeitige Lesevorgänge erlaubt und zusätzliche Schreibvorgänge werden blockiert.
Schreibsperre: x-lock (exclusive-lock) exklusive Sperre, exklusive Sperre, versuchen Sie, den Sperrtyp vor dem Schreibvorgang hinzuzufügen. Dies hat zur Folge, dass andere Skripte weder lesen noch schreiben können.
Absichtssperre: Alle Skripte, die Ressourcen betreiben, folgen einer Konvention zur Verwendung von Dateisperren (Konvention).
Blockierung: Dies bedeutet, dass nach dem Entsperren des vorherigen Vorgangs der nächste Vorgang zum Sperren der Datei weiterhin ausgeführt werden kann
Funktion :
bool flock ( resource $handle , int $operation [, int &$wouldblock ] )
Typparameter ($operation
): LOCK_SH
Lesesperre und LOCK_EX
Schreibsperre
Beispiel:
Lesesperre verwenden:
Schreibsperre verwenden:
Sie können LOCK_NB verwenden, um nicht zu blockieren, wenn die Sperre fehlschlägt:
<?php $fp = fopen('/tmp/lock.txt', 'r+'); /* Activate the LOCK_NB option on an LOCK_EX operation */if(!flock($fp, LOCK_EX | LOCK_NB)) { echo 'Unable to obtain lock'; exit(-1); } /* ... */ fclose($fp);
Entsperren: Vor PHP 5.3.2-Version, die sperren auch Es wird von fclose() freigegeben (es wird automatisch aufgerufen, nachdem das Skript beendet ist), und jetzt kann es nur manuell entsperrt werden über flock($fp,LOCK_UN)
Standard: PHPs Dateioperationsfunktion, nicht blockierter, sondern freier Betriebszustand.
Bedingungen:
Wenn ein Skriptvorgang erforderlich ist und ein anderer Skriptvorgang blockiert werden muss, ist eine Dateisperre erforderlich.
Sperrvorgang:
Fügen Sie zuerst das Schloss hinzu, prüfen Sie, ob das Schloss erfolgreich hinzugefügt wurde, und verwenden Sie es erneut, wenn es erfolgreich ist!
Sperrtyp:
Lesesperre: S-Lock (Share-Lock) Shared Lock, die erwartete zusätzliche Sperre vor dem Lesevorgang. Dadurch sind gleichzeitige Lesevorgänge erlaubt und zusätzliche Schreibvorgänge werden blockiert.
Schreibsperre: x-lock (exclusive-lock) exklusive Sperre, exklusive Sperre, versuchen Sie, den Sperrtyp vor dem Schreibvorgang hinzuzufügen. Dies hat zur Folge, dass andere Skripte weder lesen noch schreiben können.
Absichtssperre: Alle Skripte, die Ressourcen betreiben, folgen einer Konvention zur Verwendung von Dateisperren (Konvention).
Blockierung: Dies bedeutet, dass nach dem Entsperren des vorherigen Vorgangs der nächste Vorgang zum Sperren der Datei weiterhin ausgeführt werden kann
Funktion :
bool flock ( resource $handle , int $operation [, int &$wouldblock ] )
Typparameter ($operation
): LOCK_SH
Lesesperre und LOCK_EX
Schreibsperre
Beispiel:
Lesesperre verwenden:
Schreibsperre verwenden:
Sie können LOCK_NB verwenden, um nicht zu blockieren, wenn die Sperre fehlschlägt:
<?php $fp = fopen('/tmp/lock.txt', 'r+'); /* Activate the LOCK_NB option on an LOCK_EX operation */if(!flock($fp, LOCK_EX | LOCK_NB)) { echo 'Unable to obtain lock'; exit(-1); } /* ... */ fclose($fp);
Entsperren: Vor PHP 5.3.2-Version, die lock auch Es wird von fclose() freigegeben (es wird automatisch aufgerufen, nachdem das Skript beendet ist) und kann jetzt nur noch manuell über flock($fp,LOCK_UN)
entsperrt werden.
Verwandte Empfehlungen:
Wie PHP Dateisperren verwendet, um Probleme mit hoher Parallelität zu lösen
PHP verwendet Dateisperren, um Probleme mit hoher Parallelität zu lösen
So lösen Sie hohe Parallelität in PHP
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Parallelitätsvorgangs der PHP-Dateisperre. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!