Heim > Backend-Entwicklung > PHP-Problem > Kennt PHP Dateisperren? Was ist der Nutzen?

Kennt PHP Dateisperren? Was ist der Nutzen?

青灯夜游
Freigeben: 2023-03-11 22:38:02
Original
3735 Leute haben es durchsucht

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:


  • Ein Benutzer schreibt Daten in eine Datei (die Daten sind noch nicht fertig). Zu diesem Zeitpunkt schreibt ein anderer Benutzer ebenfalls Daten in die Datei, was zu einem Chaos beim Schreiben von Daten führt

    Oder wenn ein anderer Benutzer den Inhalt dieser Datei erhält, bevor der Benutzer mit dem Schreiben der Daten fertig ist, sind die vom Benutzer erhaltenen Daten unvollständig und führen zu unvollständigen Daten.
  • Um dieses Problem zu lösen, stellt PHP die Funktion flock() zur Verfügung – einen Dateisperrmechanismus, der Dateien sperren oder freigeben kann.
Beim Schreiben in eine Datei mit PHP wird die Datei erst vorübergehend gesperrt, nachdem die Sperre aufgehoben wurde. Andere Benutzer können die Datei bedienen. Dadurch wird eine Datenbeschädigung beim gleichzeitigen Zugriff auf dieselbe Datei vermieden.

Schauen wir uns das folgende Beispiel an:

<?php
header("Content-Type: text/html;charset=utf-8");    //设置字符编码
$file = "test.txt";
$handle = fopen($file,&#39;w+&#39;); //打开文件
if(flock($handle, LOCK_EX|LOCK_NB)){  //给文件上锁
    fwrite($handle, &#39;现在是:&#39;.date(&#39;Y-m-d H:i:s&#39;, time()));  //写入数据
    flock($handle, LOCK_UN);  //释放文件锁
}else{
    echo "string";
}
fclose($handle);//关闭文件
readfile($file);//读取文件内容
?>
Nach dem Login kopieren

Analysieren Sie den obigen Code:

Verwenden Sie zunächst die Funktion fopen(), um eine Datei zu öffnen. Verwenden Sie dann die Anweisung 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()函数读取文件内容。因此输出结果为:

Kennt PHP Dateisperren? Was ist der Nutzen?

下面我们来简单了解一下flock()函数。

flock($file,$lock,$block)函数接受了2个必需参数$file(需要加锁/解锁的打开文件)和$lock(锁定类型)和一个可省略的参数$block(当值设置为1 或 true时,可在文件锁定时堵塞其它进程)。

$lock参数用于设置文件锁类型,可以设置一个或多个以下值(多个值需要使用|来分隔):

  • LOCK_SH - 共享锁定(读取的程序)。允许其他进程访问该文件。

  • LOCK_EX - 独占锁定(写入的程序)。防止其他进程访问该文件。

  • LOCK_UN - 释放一个共享锁定或独占锁定

  • LOCK_NBKennt PHP Dateisperren? Was ist der Nutzen?

  • Werfen wir einen kurzen Blick auf die Funktion flock().

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage