PHP の flock() 関数の分析 (コード例付き)

autoload
リリース: 2023-04-09 22:24:01
オリジナル
2783 人が閲覧しました

PHP の flock() 関数の分析 (コード例付き)

PHP を使用するプロセスでは、ファイルを読み取る必要があることがよくありますが、他のプロセスがファイルを読み取り、変更するのを防ぎ、競合を避けるために、ファイルが読み込まれる前にファイルを読み取る必要があります。フェッチ時にロックされ、操作が完了するまでファイルが変更されます。このプロセスでは flock() 関数が使用されます。この記事では、次の内容を理解することができます。初めて、block() 関数の構文を見てみましょう:

flock( resource $handle, int $operation, int $wouldblock = ?)
ログイン後にコピー
  • $handle: ファイル システム ポインター。通常は ## によって使用されます。 #fopen() resource(リソース) を作成しました。

  • $操作:

    LOCK_SH 共有ロックを取得します (プログラムの読み取り)。 LOCK_EX 排他ロックを取得します (プログラムの書き込み。 LOCK_UN ロックを解放します (共有または排他)。 ロック中に flock() をブロックしたくない場合LOCK_NB (Windows ではまだサポートされていません)

  • $wouldblock: ロックがブロックされる場合 (EWOULDBLOCK エラー コードの場合)、オプションの 3 番目のパラメータは

    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&#39;t get the lock!";
}
fclose($fp);
?>
ログイン後にコピー
exit.text内容:Write something here
ログイン後にコピー
# を使用します

##2. LOCK_NB

<?php
$fp = fopen(&#39;exit.txt&#39;, &#39;r+&#39;);

/* Activate the LOCK_NB option on an LOCK_EX operation */
if(!flock($fp, LOCK_EX | LOCK_NB)) {
    echo &#39;Unable to obtain lock&#39;;
    exit(-1);
}

fclose($fp);


?>
ログイン後にコピー
を使用する 推奨:

2021 PHP 面接の質問の概要 (コレクション)#>>《php ビデオ チュートリアル

以上がPHP の flock() 関数の分析 (コード例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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