備考: flock() にはファイル ポインターが必要なため、書き込みモードで開くことを目的としたファイルへのアクセスを保護するために、特別なロック ファイルを使用する必要がある場合があります (fopen() 関数に「w」または「w+」を追加します)。 注: flock() は、NFS および他の一部のネットワーク ファイル システムでは使用できません。詳細については、オペレーティング システムのマニュアルを確認してください。 一部のオペレーティング システムでは、flock() がプロセス レベルで実装されます。マルチスレッド サーバー API (ISAPI など) を使用する場合、ファイルを保護するために flock() に依存することができない場合があります。これは、ファイルが同じサーバー インスタンス内の他の並列スレッドで実行されている PHP スクリプトによって処理される可能性があるためです。 flock() は、FAT やその派生物などの古いファイル システムをサポートしません。したがって、この環境では常に FALSE が返されます (特に Windows 98 ユーザーの場合)。 PHPのファイルロック関数flock関数の使い方の紹介: 構文: bool flock ( int $handle , int $operation [, int &$wouldblock ] ) flock() 操作のハンドルは、開いているファイル ポインターである必要があります。操作は次のいずれかの値になります。 1. 共有ロック (リーダー) を取得するには、操作を LOCK_SH に設定します (PHP 4.0.1 より前のバージョンでは 1 に設定) 2. 排他的ロック (ライター) を取得するには、操作を LOCK_EX に設定します (PHP 4.0.1 より前のバージョンでは 2 に設定します)。 3. ロック (共有または排他) を解放するには、操作を LOCK_UN に設定します (PHP 4.0.1 より前のバージョンでは 3 に設定)。 4. ロック時に flock() をブロックしたくない場合は、操作に LOCK_NB を追加します (PHP 4.0.1 より前のバージョンでは 4 に設定) 以下のコードを見てください。 ファイル: a.php
$fp = fopen($fp, 'r'); fclose($fp); ;?> if(flock($fp, LOCK_EX)) {
echo fread( $fp, 100); flock($fp, LOCK_UN);} else{ echo "ファイルのロックに失敗しました..."; echo fread($fp, 100);
flock($fp, LOCK_UN); } else{echo "ファイルのロックに失敗しました...";
}
|