PHP を使用するプロセスでは、ファイルを読み取る必要があることがよくありますが、他のプロセスがファイルを読み取り、変更するのを防ぎ、競合を避けるために、ファイルが読み込まれる前にファイルを読み取る必要があります。フェッチ時にロックされ、操作が完了するまでファイルが変更されます。このプロセスでは flock()
関数が使用されます。この記事では、次の内容を理解することができます。初めて、block()
関数の構文を見てみましょう:
flock( resource $handle, int $operation, int $wouldblock = ?)
$handle: ファイル システム ポインター。通常は ## によって使用されます。 #fopen()
resource(リソース) を作成しました。
LOCK_SH 共有ロックを取得します (プログラムの読み取り)。
LOCK_EX 排他ロックを取得します (プログラムの書き込み。
LOCK_UN ロックを解放します (共有または排他)。 ロック中に
flock() をブロックしたくない場合
LOCK_NB (Windows ではまだサポートされていません)
true に設定されます (Windows ではサポートされていません)
true を返し、失敗した場合は戻ります
false.
1. LOCK_EX
<?php $fp = fopen("exit.txt", "r+"); if (flock($fp, LOCK_EX)) { // 进行排它型锁定 ftruncate($fp, 0); // truncate file fwrite($fp, "Write something here"); fflush($fp); // flush output before releasing the lock flock($fp, LOCK_UN); // 释放锁定 } else { echo "Couldn't get the lock!"; } fclose($fp); ?>
exit.text内容:Write something here
##2. LOCK_NB 2021 PHP 面接の質問の概要 (コレクション)#>>《php ビデオ チュートリアル》 以上がPHP の flock() 関数の分析 (コード例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。<?php
$fp = fopen('exit.txt', 'r+');
/* Activate the LOCK_NB option on an LOCK_EX operation */
if(!flock($fp, LOCK_EX | LOCK_NB)) {
echo 'Unable to obtain lock';
exit(-1);
}
fclose($fp);
?>