我想創建一個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上。我想操作系統認爲它是相同的過程,因此功能下降。是否有跨平臺的方式來創建這種類型的PHP腳本?
雞羣文檔稱LOCK_NB在Windows上不受支持。使用沉默運算符(@)是一個非常糟糕的主意,你實際上可能會抑制你得到的錯誤。 – Evert 2011-02-05 13:42:29
@Evert,感謝您的建議,我複製了鎖定代碼,但沒有刪除@的,雖然沒有顯示任何錯誤 – Fluffy 2011-02-05 13:46:07