PHP_PHP チュートリアルで flock を使用してファイル ロックを実装する方法

WBOY
リリース: 2016-07-13 09:47:53
オリジナル
966 人が閲覧しました

PHP が flock を使用してファイル ロックを実装する方法

この記事では、PHP が flock を使用してファイル ロックを実装する方法の例について説明します。皆さんの参考に共有してください。具体的な分析は次のとおりです:

公式ドキュメントでの flock の説明は次のとおりです: flock() を使用すると、任意のプラットフォーム (ほとんどの Unix 派生製品や Windows も含む) で使用できる単純な読み取り/書き込みモデルを実装できます。ロックがブロックされる場合 (EWOULDBLOCK エラー コードの場合)、オプションの 3 番目のパラメータを TRUE に設定します。ロック操作は fclose() によって解放することもできます (コードの実行が完了すると自動的に呼び出されます)。

簡単に言うと、ファイルをロックして、複数のプロセスによるファイルへのアクセスを制限し、競合を防ぐことです。例:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

$file = fopen("test.txt","w+");

if (flock($file,LOCK_EX))

{

fwrite($file,"何かを書きます");

flock($file,LOCK_UN);

}

その他

{

echo "ファイルのロック中にエラーが発生しました!";

}

fclose($file);

?>

説明:

1. このコードの意味は、ファイル test.txt を読み書きモードで開くことです。ユーザーが php ページを呼び出すと、test.txt ファイルが操作され、flock($file, LOCK_EX) コードが実行されます。つまり、test.txt ファイルは排他的にロックされます (ファイルはこのユーザーのみが読み書きできます)。その後、他の新しいユーザーがファイルにアクセスしようとしても、前者がファイルを閉じるまでブロックされます (ロックを解除します)。

2. コードを flock($file,LOCK_EX+LOCK_NB) に変更すると、ロック時に直接エラーが返されることになります。その後、新しいユーザーがファイルにアクセスすると、「ファイルのロック中にエラーが発生しました!」と出力されます。

3. この関数の構文は flock(file, lock, block) で、file は必須です。開いているファイルをロックまたは解放するように指定します。ロックが必要です。使用するロックのタイプを指定します。ブロックはオプションです。 1 または true に設定すると、ロック中に他のプロセスがブロックされます。

例: 複数のプロセスが同じファイルを同時に正常に書き込むことができるようにするための PHP コードを記述してください

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

関数 writeData($path, $mode,$data)

{

$fp = fopen($path, $mode);

$再試行 = 0;

$max_retries = 100;

する{

if ($retries > 0)

{

usleep(rand(1, 10000));

}

$再試行 += 1;

}while (!flock($fp, LOCK_EX) および $retries if ($retries == $max_retries)

{

false を返す;

}

fwrite($fp, "$datan");

flock($fp, LOCK_UN);

fclose($fp);

true を返す;

}

この記事が皆様の PHP プログラミング設計に役立つことを願っています。

http://www.bkjia.com/PHPjc/1025313.htmlwww.bkjia.com本当http://www.bkjia.com/PHPjc/1025313.html技術記事 PHP が flock を使用してファイル ロックを実装する方法 この記事では、PHP が flock を使用してファイル ロックを実装する方法について説明します。皆さんの参考に共有してください。具体的な分析は次のとおりです: 公式文書の群れ...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート