Beispiel zur PHP-Flock-Nutzung
bool flock ( resource $handle , int $operation [, int &$wouldblock ] )
flock()ermöglicht die Ausführung einer einfachen Funktion, die auf jedem verwendet werden kann Plattform Lese-/Schreibmodell (einschließlich der meisten Unix-Derivate und Windows)
Vor PHP 5.3.2 wurden Sperren durch fclose() freigegeben (wird automatisch aufgerufen). Nachdem das Skript beendet ist), müssen Sie jetzt
Vorgang
1. LOCK_SH Erhält eine gemeinsame Sperre (Leseprogramm)
2.LOCK_EX Erhält eine exklusive Sperre (Schreibprogramm)
3.LOCK_UNSperre freigeben (ob gemeinsam oder exklusiv)
4.LOCK_NBNicht gesperrt, wenn flock() blockiert
a.php
<?php $file = 'test.txt'; $fp = fopen($file, 'w'); if(flock($fp, LOCK_EX)){ // 取得独占锁 fwrite($fp, "Hello World\r\n"); // 写入数据 sleep(10); // sleep 10秒,文件被锁定 fwrite($fp, "Hello PHP\r\n"); // 写入数据 flock($fp, LOCK_UN); // 解锁 } fclose($fp); ?>
b.php
<?php $file = 'test.txt'; $fp = fopen($file, 'r'); if(flock($fp, LOCK_SH)){ // 取得贡献锁 while(!feof($fp)){ echo fread($fp, 100); } flock($fp, LOCK_UN); } fclose($fp); ?>
Führen Sie eine erste aus. php, und führen Sie dann b.php aus
a, um die exklusive Sperre zu erhalten, b kann nur warten, bis a ausgeführt und die Sperre entsperrt ist, bevor b ausgeführt werden kann, Blockiert
a.php
<?php $file = 'test.txt'; $fp = fopen($file, 'r'); if(flock($fp, LOCK_SH)){ // 取得共享锁 sleep(10); // sleep 10秒 while(!feof($fp)){ echo fread($fp, 100); } flock($fp, LOCK_UN); } fclose($fp); ?>
b.php
6881d79e58a19bf081508955ca08811c
Führen Sie zuerst eine .php aus und dann b.php.
b kann den Dateiinhalt ausgeben, ohne auf den Abschluss der Ausführung von a warten zu müssen, nicht blockierend
a.php
<?php $file = 'test.txt'; $fp = fopen($file, 'a'); if(flock($fp, LOCK_EX)){ // 取得独占锁 fwrite($fp, "Hello World\r\n"); // 写入数据 sleep(10); // sleep 10秒,文件被锁定 fwrite($fp, "Hello PHP\r\n"); // 写入数据 flock($fp, LOCK_UN); // 解锁 } fclose($fp); ?>
b.php
<?php $file = 'test.txt'; $fp = fopen($file, 'a'); if(flock($fp, LOCK_EX)){ // 取得独占锁 fwrite($fp, "How Are You\r\n"); // 写入数据 fwrite($fp, "Show Me The Money\r\n"); // 写入数据 flock($fp, LOCK_UN); // 解锁 } fclose($fp); ?>
Führen Sie zuerst a.php aus, dann führen Sie b.php aus
b muss warten, bis a ausgeführt wird, bevor Daten geschrieben werden, Blöcke
a.php
<?php $file = 'test.txt'; $fp = fopen($file, 'a'); if(flock($fp, LOCK_EX)){ // 取得独占锁 fwrite($fp, "Hello World\r\n"); // 写入数据 sleep(10); // sleep 10秒,文件被锁定 fwrite($fp, "Hello PHP\r\n"); // 写入数据 flock($fp, LOCK_UN); // 解锁 } fclose($fp); ?>
b.php
<?php $file = 'test.txt'; $fp = fopen($file, 'a'); if(flock($fp, LOCK_EX|LOCK_NB)){ // 取得独占锁 fwrite($fp, "How Are You\r\n"); // 写入数据 fwrite($fp, "Show Me The Money\r\n"); // 写入数据 flock($fp, LOCK_UN); // 解锁 }else{ echo 'file locked'; } fclose($fp); ?>
Führen Sie zuerst a.php aus, Führen Sie dann b.php aus. b kann die exklusive Sperre nicht erhalten. Sie müssen nicht warten, bis die Ausführung abgeschlossen ist. Stattdessen wird direkt die Meldung zurückgegeben, dass die Sperre nicht erhalten werden kann.
Nicht blockierend
Zusammenfassung:Gemeinsame Sperre verwenden
LOCK_SHWenn es liest, müssen Sie nicht warten, aber wenn es Enter schreibt, müssen Sie warten, bis der Lesevorgang abgeschlossen ist. Verwenden Sie die exklusive Sperre
LOCK_EX, sowohl das Schreiben als auch das Lesen müssen warten.
LOCK_UN, unabhängig davon, ob gemeinsam genutzte/lesbar belegte Sperren verwendet werden, müssen diese nach der Verwendung entsperrt werden.
LOCK_NBblockiert im gesperrten Zustand nicht, sondern fordert zum Sperren auf. In diesem Artikel werden die Verwendungsbeispiele von PHP Flock erläutert. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website.
Verwandte Empfehlungen:
Erklärung der Ersetzungsmethode php str_replace für bestimmte Zeiten
Anweisungen zur Verwendung von header, headers_sent, headers_list, header_remove
Lösung zum Ändern des von der PDO-Abfrage MySQL zurückgegebenen Feld-Integer-Typs in String-Typ
Das obige ist der detaillierte Inhalt vonEine Erläuterung der Anwendungsbeispiele für PHP-Flock. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!