php flockの使用例
bool flock ( resource $handle , int $operation [, int &$wouldblock ] )
flock()を使用すると、任意のプラットフォーム(ほとんどのUnix派生製品やWindowsを含む)で使用できる単純な読み取り/書き込みモデルを実装できます
PHP 5.3より前。 2、ロックは fclose() (スクリプト終了後に自動的に呼び出されます) によって解放されますが、手動でロックを解除する必要があります
operation
1.LOCK_SH 共有ロックを取得 (読み取り)プログラム)
2.LOCK_EX 排他ロックを取得する(プログラムを書く)
3.LOCK_UN ロックを解放する(共有か排他かを問わない)
4.LOCK_NB flock( )はロックされています。Aを使用してファイルを記述し、ファイルを読み取り、blocking
b <?php
$file = 'test.txt';
$fp = fopen($file, 'w');
if(flock($fp, LOCK_EX)){ // 取得独占锁
fwrite($fp, "Hello World\r\n"); // 写入数据
sleep(10); // sleep 10秒,文件被锁定
fwrite($fp, "Hello PHP\r\n"); // 写入数据
flock($fp, LOCK_UN); // 解锁
}
fclose($fp);
?>
最初に a.php を実行し、次に b.php を実行します
a は排他ロックを取得し、b は待機することしかできず、a が実行されてロックが解除された後にのみ b を実行できます。
例 2: A と B の両方がブロックせずに共有ロックを使用します
a.php<?php
$file = 'test.txt';
$fp = fopen($file, 'r');
if(flock($fp, LOCK_SH)){ // 取得贡献锁
while(!feof($fp)){
echo fread($fp, 100);
}
flock($fp, LOCK_UN);
}
fclose($fp);
?>
<?php $file = 'test.txt'; $fp = fopen($file, 'r'); if(flock($fp, LOCK_SH)){ // 取得共享锁 sleep(10); // sleep 10秒 while(!feof($fp)){ echo fread($fp, 100); } flock($fp, LOCK_UN); } fclose($fp); ?>まず a.php を実行し、次に実行しますb.php
b は、a の実行完了を待たずにファイルの内容を出力できます。ノンブロッキング
例 3: A と B は両方とも排他ロックを使用してファイルを書き込み、ブロックしています
a.php6881d79e58a19bf081508955ca08811c
<?php $file = 'test.txt'; $fp = fopen($file, 'a'); if(flock($fp, LOCK_EX)){ // 取得独占锁 fwrite($fp, "Hello World\r\n"); // 写入数据 sleep(10); // sleep 10秒,文件被锁定 fwrite($fp, "Hello PHP\r\n"); // 写入数据 flock($fp, LOCK_UN); // 解锁 } fclose($fp); ?>まずa.phpを実行し、次にb.php
bを実行する必要があります実行されましたデータを書き込む前に、ブロック
例 4: LOCK_NB はロックされてもブロックせず、待機もしません
a.php<?php
$file = 'test.txt';
$fp = fopen($file, 'a');
if(flock($fp, LOCK_EX)){ // 取得独占锁
fwrite($fp, "How Are You\r\n"); // 写入数据
fwrite($fp, "Show Me The Money\r\n"); // 写入数据
flock($fp, LOCK_UN); // 解锁
}
fclose($fp);
?>
<?php $file = 'test.txt'; $fp = fopen($file, 'a'); if(flock($fp, LOCK_EX)){ // 取得独占锁 fwrite($fp, "Hello World\r\n"); // 写入数据 sleep(10); // sleep 10秒,文件被锁定 fwrite($fp, "Hello PHP\r\n"); // 写入数据 flock($fp, LOCK_UN); // 解锁 } fclose($fp); ?>まず a.php を実行し、次に b.php を実行します
b は排他ロックを取得できません。 a の実行が完了するまで待つ必要はありませんが、ロックを取得できないプロンプトを直接返します。 ノンブロッキング
概要:
読み取りの場合は待つ必要はありませんが、書き込みの場合は待つ必要があります。読み取りが完了します。
排他ロックLOCK_EXを使用すると、書き込み/読み取りの両方が待機する必要があります。
LOCK_UN、共有/読み取りロックの使用に関係なく、使用後にロックを解除する必要があります。
LOCK_NB は、ロックされている場合、ブロックされませんが、ロックを求めるプロンプトが表示されます。
この記事では、php flock の使用例について説明します。関連コンテンツについては、php 中国語 Web サイトを参照してください。 関連する推奨事項: php str_replace 指定時刻を置換する方法の説明
以上がphp flockの使用例の説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。