PHPflockファイルロックの使い方

墨辰丷
リリース: 2023-03-31 08:14:02
オリジナル
1597 人が閲覧しました

この記事では主に紹介していますので、興味のある方は参考にしていただければ幸いです。

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

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

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

<?php 
  $file = fopen("test.txt","w+"); 
  if (flock($file,LOCK_EX)) 
  { 
   fwrite($file,"Write something"); 
   flock($file,LOCK_UN); 
  } 
  else 
  { 
    echo "Error locking file!"; 
  } 
  fclose($file); 
?>
ログイン後にコピー

説明:

1. このコードの意味は、ファイル test.txt を読み取りおよび書き込みモードで開くことです。ユーザーが php ページを呼び出すと、ファイルが開きます。ファイル test.txt .txt ファイルの場合、flock($file,LOCK_EX) コードが実行され、test.txt ファイルが排他的にロックされます (ファイルはこのユーザーのみが読み書きできます)。ユーザーがアクセスを希望している場合、ユーザーがファイルを閉じる (ロックを解放する) まで、ファイルはブロックされます。

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

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

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

function writeData($path, $mode,$data) 
{ 
  $fp = fopen($path, $mode);  
  $retries = 0; 
  $max_retries = 100;  
  do{ 
    if ($retries > 0)  
    { 
      usleep(rand(1, 10000)); 
    } 
    $retries += 1; 
  }while (!flock($fp, LOCK_EX) and $retries<= $max_retries);  
  if ($retries == $max_retries)  
  { 
    return false; 
  } 
  fwrite($fp, "$data\n"); 
  flock($fp, LOCK_UN); 
  fclose($fp);  
  return true;  
}
ログイン後にコピー

要約:上記は次のとおりです。この記事の内容全体が皆さんの学習に役立つことを願っています。

関連する推奨事項:

php で日付と文字列を操作する方法

Web ページを実装するための php ツールキャッシュ クラス コードと使用法

php は、ajax

に基づいてすべてのバックグラウンド関数呼び出しを制御します。

以上がPHPflockファイルロックの使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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