Я работаю со следующим кодом на PHP-скрипте:
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-секундного периода, сценарий на второй вкладке не умрет. Однако разные вкладки в разных браузерах работают. Я пробовал использовать Chrome, Firefox и IE, последние версии стабильных выпусков.
Я на 100% уверен, что файл "pid.txt" был правильно создан первым скриптом.
Я подозреваю, что это как-то связано с оператором try / catch, потому что если я сделаю
if(file_exists($dir."pid.txt"))die("The process is already running");
это работает. Однако это одна из многих возможных ошибок, и я хотел бы сгруппировать их в операторе try / catch. Вот почему я не хочу продолжать этот последний подход.
Идеи