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.
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!