PHP flock


PHP flock()関数はファイルをロックまたは解放します.
成功するとtrueが返されます.失敗した場合はfalseを返します.
flock()操作のfileは、すでに開いているファイルポインタでなければなりません.
lockパラメータは、次のいずれかの値で指定できます.
共有ロック(読み出しプログラム)を取得するには、ロックをLOCK_に設定しますSH(PHP 4.0.1以前のバージョンは1に設定).排他ロック(書き込みのプログラム)を取得するにはlockをLOCK_に設定EX(PHP 4.0.1以前のバージョンでは2に設定されています).ロックを解除するには(共有または排他にかかわらず)、lockをLOCK_に設定します.UN(PHP 4.0.1以前のバージョンでは3に設定されていた).ロック時にflock()が詰まるのを望まない場合はlockにLOCK_を付けるNB(PHP 4.0.1以前のバージョンでは4に設定されていた).
ヒント:fclose()でロック操作を解放できます.コードの実行が完了すると自動的に呼び出されます.
注記:flock()にはファイルポインタが必要なため、書き込みモードで開くファイルへのアクセスを特別なロックファイルで保護しなければならない場合があります(fopen()関数に「w」または「w+」).

<?php
$file = fopen("test.txt","w+");
//        
if (flock($file,LOCK_EX)) 
{ 
fwrite($file,"Write something");
// release lock flock($file,LOCK_UN);
} 
else 
{
 echo "Error locking file!";
} fclose($file);
?>

flockの公式ドキュメントでの解釈は、flock()は、どのプラットフォームでも使用できる簡単な読み取り/書き込みモデル(Unix派生版やWindowsの大部分を含む)を実行することができます.ロックが詰まる場合(EWOULDBLOCKエラーコードの場合)は、オプションの3番目のパラメータをTRUEに設定します.ロック操作はfclose()によって解放されてもよい(コード実行が完了すると自動的に呼び出される).
簡単に言えば、1つのファイルをロックすることで、マルチプロセスがファイルにアクセスする際に制限され、競合を防止します.
例を挙げると、

<?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ファイルを操作すると、flock($file,LOCK_EX)コードが実行する、test.txtファイルは独占ロックされ(このファイルはユーザによってのみ読み書き操作が可能である)、他の新しいユーザがこのファイルにアクセスしようとすると、前者がファイルを閉じるまでブロックされます(ロックが解除されます).
2.コードをflock($file,LOCK_EX+LOCK_NB)に変更してロック時にエラーを直接返すと、新しいユーザーがファイルにアクセスしていると「Error locking file!」と出力されます.
3.この関数の構文はflock(file,lock,block)であり、fileが必要である.ロックまたは解放する開いているファイルを指定します.
ロックが必要です.どのロックタイプを使用するかを指定します.
blockオプション.1またはtrueに設定すると、ロック時に他のプロセスをブロックします.