Запрет одновременного выполнение php скрипта

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

Обычно к php скрипту можно обратится и выполнить его на одном и более браузерах, одновременно

Обычно к php скрипту могут обратится одновременно и выполнить его множество пользователей с разных браузеров. Это хорошо видно на сайтах, так как к ним подключаются пользователи не по очереди а одновременно, те тормозя выполнение предыдущей выполняемой копии скрипта.

Но иногда скрипт должен выполнятся по очереди, тоесть, есть 5 пользователей, и они одновременно обратились к скрипту php, тогда с начало должен выполнится скрипт для первого пользователя, потом для второго, третьего и так далее.

Лично мне поочередно выполнение скрипта нужно было для синхронизации сделок из битрикс-24 с другой системой. Так как с битрикса, почему то, событие по обновлению сделки уходит дважды, в один и тот же промежуток времени, принимающий скрипт получал два запроса и создавал дубли сделок.

Решение по запрету одновременного выполнения скрипта

Рассматривалось для решения данной проблемы:

  1. на основе сессий
  2. на основе файла

Остановился пока на решении на основе файла.

Суть способа такая — первый запрос к файлу скрипта, создает и блокирует спец. файл, и удерживает блокировку пока не отработает, и если другой зарос тоже в это время обратился к скрипту, то в нем делается проверка, а заблокирован ли спец. файл или нет и если не заблокирован то выполняет заданные действия в скрипте.

Пример кода


$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);
}

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *