Heim  >  Artikel  >  Backend-Entwicklung  >  PHP implementiert Methoden zum Sperren und Entsperren von Dateien

PHP implementiert Methoden zum Sperren und Entsperren von Dateien

墨辰丷
墨辰丷Original
2018-05-21 09:15:211834Durchsuche

Dieser Artikel stellt hauptsächlich die Methode von PHP zum Implementieren von Dateisperr- und -entsperrvorgängen vor. Er analysiert die Funktionen, Implementierungsmethoden und zugehörigen Vorsichtsmaßnahmen von PHP für Dateisperr- und -entsperrvorgänge in Form von Beispielen bis

In Projekten werden im Allgemeinen Protokolle verwendet, z. B. Datenbankabfrageprotokolle, Zugriffsprotokolle und Protokolle für die Rückgabe von externen Schnittstellenanforderungen. Bei der Verarbeitung von Protokollen lautet die einfache Schreibmethode wie folgt:

$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. Probleme treten auf, wenn mehrere Benutzer gleichzeitig besuchen Wenn mehrere Prozesse dieselbe Ressource verwenden, beginnt der vorherige Prozess mit dem Schreiben, bevor der nachfolgende Prozess mit dem Schreiben beginnt, sodass das endgültig generierte 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. Es ist wie folgt geschrieben

$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, dass andere Prozesse die Datei während des Dateisperrzeitraums nicht bearbeiten können, können Sie die angegebene Demo verwenden unten

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));

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

Verwandte Empfehlungen:

PHP-DateisperreHohe Parallelität lösen

Detaillierte Erläuterung der Parallelitätsvorgänge für PHP-Dateisperren

Beispielanalyse für PHP-Dateisperre und Prozesssperre

Das obige ist der detaillierte Inhalt vonPHP implementiert Methoden zum Sperren und Entsperren von Dateien. 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