flock
そふぃのPHP入門 >> PHP関数リファレンス >> ファイルシステム関数 >> flock

flock

解説 ファイルをロックする
書式 bool flock( resource handle , int operation [, int wouldblock ] )
bool flock( resource ファイルポインタ , int ロックの種類 [, int ブロックモード ] )
引数 handle ファイルポインタ
operation ロックの種類
wouldblock ブロックモード
返値 TRUE(成功した時)/FALSE(失敗した時)

PHPマニュアル:flock flock()

flock()関数:概略解説

flock()は指定したファイルをロックする関数です。

flock()関数:返り値解説

成功した場合にTRUE、失敗した場合はFALSEを返します。

flock()関数:引数解説

handleファイルポインタ
ファイルポインタを指定します。
operationロックの種類

ファイルロックの種類を指定します。これは「共有ロック」や「排他ロック」などの事です。指定できる値は以下の通りです。この値は現在では定数値でも数値でも指定可能ですが、PHP4.0.1以下のバージョンでは数値の方しか使えません。現在は定数値で指定している方が多いようです。

flock()関数でのロック指定方法
ロックの種類 定数値 数値 説明
共有ロック LOCK_SH 1 書き込みのみ禁止
排他ロック LOCK_EX 2 読み書き両方禁止
ロックの破棄 LOCK_UN 3 ロックを破棄する
ノンブロックモード LOCK_NB 4 ロック中、flock()関数でブロックモードとしない

ここで使えるロック用の定数はPHPに標準で組み込まれている定数です。つまりdefine()で自分で定義しなくてもいつでも(PHP4.0.1以降なら)使えます。

wouldblockブロックモード
省略可能なオプション引数になってますが、ブロックモードにするかどうかというのを真偽値(TRUE/FALSE)で指定します。省略した場合はFALSEとみなされ、ブロックモードとしません。つまり、ブロックモードにしたい場合には第3引数にTRUEを指定する必要があります。

flock()関数:補足解説

ロックの破棄LOCK_UNは文字通りかけたロックを外しますが、実際にはfclose()の段階で自動的に行われます。通常、ロックはfclose()の寸前に書かれる(処理される)のが好ましいので、あまり明示的に書かれる事はありません。

flock()関数:注意

ファイル名ではなく、ファイルポインタを指定する事に注意して下さい。ファイルポインタはfopen()関数やfsockopen()関数で正常に開かれたファイルでなければいけません。

参考関数

  • fopen() ---- ファイルまたはURLを開く
  • fsockopen() ---- インターネットもしくはUNIXドメインのソケット接続を開始する
  • fclose() ---- ファイルポインタを閉じる

サンプルスクリプト

簡単な利用例

  1. <?php
  2. $fp = fopen('somefile.txt',"r+");
  3. flock($fp,LOCK_EX); // 排他ロック
  4.  
  5. // ここにその他のファイル書き込み処理
  6.  
  7. flock($fp,LOCK_UN); // ロック開放
  8. fclose($fp);
  9. ?>
PHP辞典
PHP辞典 PHP5の関数にも対応したリファレンスですが、関数ごとにバージョンが表示されているのでPHP4ユーザにも安心。簡単なサンプルが全ての関数についている事と目的別検索が魅力です。
PHPポケットリファレンス
PHPポケットリファレンス 携帯用でもOKの小さめの本。関数本にありがちな分厚い・重い・見るのがおっくうという欠点をコンパクト化で解消してます。小さいながらも関数の掲載量・内容は共に十分充実しており、関数ごとのサンプルや目的別検索もあります。