:PHP 시도/catch 문은 다른 탭에서 작동하지 않는/같은 브라우저
try{
if(file_exists($dir."pid.txt"))throw new Exception("Process is already running");
}
catch(Exception $e){
die("Warning: ".$e->getMessage()." in ".$e->getFile()." on line ".$e->getLine());
}
touch($dir."pid.txt");
sleep(20); // Just for a proof of concept
기본적으로 어떤 스크립트가 수행하는 것은 :
경우 파일 $dir."pid.txt"
- $dir
에 올바른 권한이있는 디렉토리가있는 경우 - 이미 존재하는 경우 스크립트를 종료하십시오. 그렇지 않은 경우 pid.txt
파일을 만들고 20 초 동안 절전 모드로 전환하십시오.
의도 한 효과는이 스크립트가 두 번 액세스되는 것을 방지하는 것입니다.
한 탭에서 스크립트를 열고 20 초 내에 다른 탭에서 다시 시도하면 두 번째 탭의 스크립트가 죽지 않습니다. 그러나 브라우저마다 다른 탭이 작동합니다. 나는 크롬, 파이어 폭스, 그리고 IE, 최신 안정 버전으로 노력 해왔다.
"pid.txt"파일이 첫 번째 스크립트에서 올바르게 생성되었는지 100 % 확신합니다.
은 내가
if(file_exists($dir."pid.txt"))die("The process is already running");
이 작업을 수행 할 경우 때문에이 시도/catch 문 함께 할 수있는 뭔가가 생각한다. 그러나 이것은 많은 가능한 오류 중 하나이며이를 try/catch 문으로 그룹화하려고합니다. 그래서 나는이 마지막 접근법을 계속하고 싶지 않습니다.
아이디어가 있으십니까?
여기서'$ dir'을 정의합니까? – Vytautas
@Vytautas : $ dir은 이전 줄에 정의되어 있으며 $ dir = $ _SERVER [ "DOCUMENT_ROOT"]와 같습니다. "/ path/to/dir /"; – delolmo
나는 PHP가 브라우저 탭에 신경 쓰지 않는다는 것을 확신 할 수있다. :) 두 가지 요청에 대해 다른 점이 무엇인지 또는 논리에 문제가 있는지 파악하십시오. – deceze