php flockの使用例の説明

jacklove
リリース: 2018-06-09 11:04:43
オリジナル
2766 人が閲覧しました

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

php

rreee

b

<?php
$file = &#39;test.txt&#39;;
$fp = fopen($file, &#39;w&#39;);
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 = &#39;test.txt&#39;;
$fp = fopen($file, &#39;r&#39;);
if(flock($fp, LOCK_SH)){ // 取得贡献锁
    while(!feof($fp)){
        echo fread($fp, 100);
    }
    flock($fp, LOCK_UN);
}
fclose($fp);
?>
ログイン後にコピー

b.php
<?php
$file = &#39;test.txt&#39;;
$fp = fopen($file, &#39;r&#39;);
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.php

<?php
$file = &#39;test.txt&#39;;
$fp = fopen($file, &#39;r&#39;);
if(flock($fp, LOCK_SH)){ // 取得共享锁
    while(!feof($fp)){
        echo fread($fp, 100);
    }
    flock($fp, LOCK_UN);
}
fclose($fp);
?>
ログイン後にコピー

b.php
<?php
$file = &#39;test.txt&#39;;
$fp = fopen($file, &#39;a&#39;);
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 = &#39;test.txt&#39;;
$fp = fopen($file, &#39;a&#39;);
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);
?>
ログイン後にコピー

b.php
<?php
$file = &#39;test.txt&#39;;
$fp = fopen($file, &#39;a&#39;);
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 指定時刻を置換する方法の説明

header、headers_sent、headers_list、header_removeの使用方法について

PDO クエリ mysql はフィールド整数を返します変数 String型の解決策

以上がphp flockの使用例の説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート