Im vorherigen Artikel haben wir vorgestellt, wie Sie mit PHP Dateien im angegebenen Verzeichnis abrufen (mit Ausnahme von Unterverzeichnissen). Wenn Sie es benötigen, lesen Sie bitte „Woher weiß PHP, welche Dateien sich im angegebenen Verzeichnis befinden?“. Dieses Mal stellen wir Ihnen die Dateisperre vor, schauen uns die Funktion der Dateisperre an und erfahren, wie Sie eine Dateisperre hinzufügen und die Dateisperre aufheben.
Im vorherigen Artikel „php-Dateioperation: So löschen Sie die Datei und fügen Sie Daten erneut hinzu“ haben wir die Methode zum Schreiben von Daten in die Datei vorgestellt. In dem Artikel sind wir ein einzelner Benutzer, der die Datei gleichzeitig bearbeitet Zeit, also gibt es kein Problem. Wenn jedoch in einer Netzwerkumgebung mehrere Client-Benutzer gleichzeitig auf dieselbe Datei auf dem Server zugreifen, weist das Programm Fehler auf und die Datei ist möglicherweise beschädigt.
Zum Beispiel:<?php header("Content-Type: text/html;charset=utf-8"); //设置字符编码 $file = "test.txt"; $handle = fopen($file,'w+'); //打开文件 if(flock($handle, LOCK_EX|LOCK_NB)){ //给文件上锁 fwrite($handle, '现在是:'.date('Y-m-d H:i:s', time())); //写入数据 flock($handle, LOCK_UN); //释放文件锁 }else{ echo "string"; } fclose($handle);//关闭文件 readfile($file);//读取文件内容 ?>
Analysieren Sie den obigen Code:
flock($handle, LOCK_EX|LOCK_NB)
, um der Datei eine exklusive Sperre „LOCK_EX“ hinzuzufügen, und legen Sie „LOCK_NB“ fest, um das Blockieren anderer Prozesse beim Sperren zu vermeiden und den Inhalt direkt zurückzugeben in else . Anschließend können Sie mit der Funktion fwrite() einen Schreibvorgang ausführen und die aktuelle Uhrzeit schreiben. Nachdem der Dateivorgang abgeschlossen ist, müssen Sie die Funktion fclose() verwenden, um die Datei zu schließen, und schließlich die Funktion readfile() verwenden, um den Dateiinhalt zu lesen. Das Ausgabeergebnis lautet also: flock($handle, LOCK_EX|LOCK_NB)
语句给文件加一个“LOCK_EX”独占锁,且设置“LOCK_NB”在锁定的情况下避免阻塞其他进程,直接返回else中的内容。接着就可以使用fwrite()函数进行写入操作,写入当前的时间了。
文件操作好后,就需要使用fclose()函数来关闭文件;最后使用readfile()函数读取文件内容。因此输出结果为:
下面我们来简单了解一下flock()函数。
flock($file,$lock,$block)
函数接受了2个必需参数$file
(需要加锁/解锁的打开文件)和$lock
(锁定类型)和一个可省略的参数$block
(当值设置为1 或 true时,可在文件锁定时堵塞其它进程)。
$lock参数用于设置文件锁类型,可以设置一个或多个以下值(多个值需要使用|
来分隔):
LOCK_SH
- 共享锁定(读取的程序)。允许其他进程访问该文件。
LOCK_EX
- 独占锁定(写入的程序)。防止其他进程访问该文件。
LOCK_UN
- 释放一个共享锁定或独占锁定
LOCK_NB
flock($file,$lock,$block)
-Funktion akzeptiert 2 erforderliche Parameter $file
(offene Datei, die gesperrt/entsperrt werden muss) und $ lock
(Sperrtyp) und einen ausgelassenen Parameter $block
(wenn der Wert auf 1 oder true gesetzt ist, können andere Prozesse blockiert werden, wenn die Datei gesperrt ist). $lock-Parameter wird verwendet, um den Dateisperrtyp festzulegen. Sie können einen oder mehrere der folgenden Werte festlegen (mehrere Werte müssen durch |
getrennt werden):
LOCK_SH
– Gemeinsame Sperre (Leseprogramm). Erlauben Sie anderen Prozessen den Zugriff auf die Datei. LOCK_EX
– Exklusive Sperre (geschriebenes Programm). Verhindern Sie, dass andere Prozesse auf die Datei zugreifen.
LOCK_UN
– Geben Sie eine gemeinsame oder exklusive Sperre frei. 🎜🎜🎜🎜LOCK_NB
– Vermeiden Sie das Blockieren anderer Prozesse im Falle einer Sperre. 🎜🎜🎜🎜Okay, das ist alles. Wenn Sie noch etwas wissen möchten, können Sie hier klicken. → →🎜Grundlegende Bedienung von PHP-Dateien🎜🎜🎜🎜🎜Empfohlen:🎜"🎜Sammlung von PHP-Interviewfragen (Sammlung)🎜" "🎜php-Video-Tutorial🎜"🎜Das obige ist der detaillierte Inhalt vonKennt PHP Dateisperren? Was ist der Nutzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!