Heim  >  Artikel  >  Backend-Entwicklung  >  So sperren und entsperren Sie Dateien in PHP

So sperren und entsperren Sie Dateien in PHP

小云云
小云云Original
2018-02-10 10:27:311525Durchsuche

In Projekten werden im Allgemeinen Protokolle verwendet, z. B. Datenbankabfrageprotokolle, Zugriffsprotokolle und Protokolle für die Rückgabe von externen Schnittstellenanforderungen. In diesem Artikel werden Ihnen hauptsächlich die Methoden zum Sperren und Entsperren von Dateisperren in PHP sowie Beispiele in diesem Formular vorgestellt Analysiert die Funktionen, Implementierungsmethoden und zugehörigen Vorsichtsmaßnahmen von PHP zum Sperren und Entsperren von Dateien. Freunde, die es benötigen, können darauf verweisen.


$file = 'log.txt';
$fp = fopen($file, 'a+');
if(!is_writable($file)){
  die("The $file is not writable!");
}
fwrite($fp, 'here');
fclose($fp);

Eine Website wird jedoch nicht nur von einem Benutzer gleichzeitig besucht. Sie wird angezeigt, wenn mehrere Benutzer sie gleichzeitig besuchen Das Problem besteht darin, dass, wenn mehrere Prozesse dieselbe Ressource verwenden, der vorherige Prozess mit dem Schreiben beginnt, bevor der nachfolgende Prozess mit dem Schreiben beginnt, sodass das endgültige Protokoll fehlerhaft ist. In diesem Fall werden Sperren verwendet. Während des Dateisperrzeitraums werden andere Prozesse die Datei nicht ändern. Sie können nur ausgeführt werden, wenn die Datei entsperrt ist. Der Text lautet wie folgt:


$file = 'log.txt';
$fp = fopen($file, 'a+');
if(!is_writable($file)){
  exit("The $file is not writable!");
}
flock($fp, LOCK_EX);// 加锁
fwrite($fp, 'here');
flock($fp, LOCK_UN);// 解锁
fclose($fp);

Wenn Sie das Beispiel testen möchten, bei dem andere Prozesse die Datei während des Dateisperrzeitraums nicht bearbeiten können, können Sie die unten angegebene Demo verwenden

log.php


$file = 'log.txt';
$fp = fopen($file, 'a+');
if(!is_writable($file)){
  exit("The $file is not writable!");
}
flock($fp, LOCK_EX);
fwrite($fp, 'here');
sleep(10);
flock($fp, LOCK_UN);
fclose($fp);

test.php


$file = 'lock.txt';
$fp = fopen($file, 'a');
fwrite($fp, 'good'); // 在sleep期间写不进去
fclose($fp);
// 或是直接使用下面的这个例子,发现在sleep期间打印是个空值
//var_dump(file_get_contents($file));

Beim Testen Führen Sie zuerst log.php und dann test.php aus. Sie werden feststellen, dass test.php im Ruhezustand nicht ausgeführt werden kann.

Verwandte Empfehlungen:

PHP implementiert die gleichzeitige Rush-Funktion durch Sperren

Methode zur Implementierung der MySQL-Anweisungssperre

Mysql-Transaktionsverarbeitung mit hoher Parallelität und Sperrung

Das obige ist der detaillierte Inhalt vonSo sperren und entsperren Sie Dateien in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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