PHPファイルを作成しようとしていますが、すでに実行中の場合は実行されません。私が使用しているコードは次のとおりです。PHPでファイルをロックするには?
<?php
class Test {
private $tmpfile;
public function action_run() {
$this->die_if_running();
$this->run();
}
private function die_if_running() {
$this->tmpfile = @fopen('.refresher2.pid', "w");
$locked = @flock($this->tmpfile, LOCK_EX|LOCK_NB);
if (! $locked) {
@fclose($this->tmpfile);
die("Running 2");
}
}
private function run() {
echo "NOT RUNNNING";
sleep(100);
}
}
$test = new Test();
$test->action_run();
問題は、コンソールからこれを実行すると素晴らしいことです。しかし、私はそれをブラウザから実行しようとすると、多くのインスタンスが同時に実行できます。これは、Windows 7、XAMPP、PHP 5.3.2にあります。 OSはそれが同じプロセスであると考えているため、機能が低下すると思います。このタイプのPHPスクリプトを作成するためのクロスプラットフォームの方法はありますか?
LOCK_NBはWindowsではサポートされていません。無音演算子(@)を使用することは本当に悪い考えです。実際には、あなたが得ているエラーを抑制しているかもしれません。 – Evert
@Evert、提案のおかげで、私はロックコードをコピーしましたが、@は削除されませんでしたが、エラーは表示されません。 – Fluffy