0

ファイルをロックしました。システムがロックされたファイルにどのように反応するかをテストしようとしています。require_once他のプロセスが、そのファイルが再び解放されるまでプロセスが解放されるのを待ち、エラーが返されないようにしたいと思います。

問題は、私が何をしても、ファイルをロックして、別のプロセスがファイルを要求している間待機することができないようで、そのロックされたファイルに対するシステムの反応を確認することです。


1.を試してみsleep()ましたが、動作しません。PHP エンジン全体が停止します。
2. Enter キーを押すまで一時停止するバッチ ファイルを作成しました。と使用exec("cmd.exe /c START c:\\1.bat");

つまり、すべてのプロセスが実際にはタスクの 1 つのシリアル キューになっているので、1 つが何らかの理由で一時停止すると、他のすべてのプロセスも一時停止するのではないでしょうか?

ファイルがロックされているかどうかをテストするにはどうすればよいですか?
もちろん、私が正しければ、他のプロセスがファイルにアクセスできない場合、ファイルをロックする意味は何ですか?

4

2 に答える 2

1

これrequire_onceはphpによって処理されます。そのため、単純にロックを取得することはできません。ファイルロックを見る場合は、これ
を参照し てください。ロックされたファイルにアクセスしようとするときは常にロックを使用する必要があると記載されています。

于 2012-05-08T08:51:41.847 に答える
1
$file = fopen('somefile.php', 'r+');

while(!flock($file, LOCK_SH | LOCK_NB)) {
    sleep(1);
}

require 'somefile.php';

flock は php スクリプト内では機能しないように見えるため、ロックが存在するかどうかを確認する必要があります。

于 2012-05-08T08:16:16.340 に答える