가, 다음 코드는 괜찮 (가 경쟁 조건 일 수 있지만, 미세이 아마 매우 드문 cronjob를 할 수 있습니다) :
이
if (file_exists($lockfilename)) {
... // lock is already taken
} else {
if (!file_put_contents($lockfilename, $lockstring)) {
error("unable to write $lockfilename");
}
$lock_taken = true;
... // do what you have to do
if (!unlink($lockfilename)) {
warning("unable to unlink $lockfilename");
}
$lock_taken = false;
}
전역 변수 $lock_taken
이 있는지 확인하는 것이 유용 할 수 있습니다 실행이 정지 될 때마다 lockfile이 제거됩니다. $lockstring
은 날짜 또는 유닉스 타임 스탬프 일 수 있습니다. 너무 오래되면 잠금을 제거하는 데 유용 할 수 있습니다 (그러나 filemtime()
으로 충분할 수 있음). 당신이 절대적으로 경쟁 조건 위험을 감수 할 수없는 경우
, 당신은하지만,
if (!($lockfile = fopen($lockfilename, "x"))) {
... // lock is already taken
} else {
$lock_taken = true;
... // write something to lockfile (optional)
fclose($lockfile);
... // do what you have to do
if (!unlink($lockfilename)) {
warning("unable to unlink $lockfilename");
}
$lock_taken = false;
}
같은 지역 파일 잠금이 단지 작품을 뭔가를해야합니다.