Обычно к php скрипту можно обратится и выполнить его на одном и более браузерах, одновременно
Обычно к php скрипту могут обратится одновременно и выполнить его множество пользователей с разных браузеров. Это хорошо видно на сайтах, так как к ним подключаются пользователи не по очереди а одновременно, те тормозя выполнение предыдущей выполняемой копии скрипта.
Но иногда скрипт должен выполнятся по очереди, тоесть, есть 5 пользователей, и они одновременно обратились к скрипту php, тогда с начало должен выполнится скрипт для первого пользователя, потом для второго, третьего и так далее.
Лично мне поочередно выполнение скрипта нужно было для синхронизации сделок из битрикс-24 с другой системой. Так как с битрикса, почему то, событие по обновлению сделки уходит дважды, в один и тот же промежуток времени, принимающий скрипт получал два запроса и создавал дубли сделок.
Решение по запрету одновременного выполнения скрипта
Рассматривалось для решения данной проблемы:
- на основе сессий
- на основе файла
Остановился пока на решении на основе файла.
Суть способа такая — первый запрос к файлу скрипта, создает и блокирует спец. файл, и удерживает блокировку пока не отработает, и если другой зарос тоже в это время обратился к скрипту, то в нем делается проверка, а заблокирован ли спец. файл или нет и если не заблокирован то выполняет заданные действия в скрипте.
Пример кода
$lock = $_SERVER['DOCUMENT_ROOT'].'/test.lock'; $f = fopen($lock, 'x'); if($f === false){ die("\nCan't aquire lock\n"); }else{ sleep(3); sleep(3); fclose($f); unlink($lock); }