Задать вопрос

Как запретить одновременный запуск PHP скрипта?

Есть файл test.php
В этом файле я добавил вот такой код:
public function __construct()
{
       $lock = fopen('lock_file.lock', 'w');
        if (!($lock && flock($lock, LOCK_EX | LOCK_NB))) {
            exit('already running');
        }
}


Теперь делаем простую вещь: переходим по адресу 111.222.333/test.php тем самым запускаем скрипт, далее он начинает выполняться, тем временем мы открываем новую вкладку и делаем еще один запуск - он УСПЕШНО выполняется без ошибок.
обе вкладки грузятся секунд 30-40 и по завершению загрузки не выдают ошибок, т.е. в обоих случаях скрипт выполнился.

ВОПРОС: Как в итоге запретить повторный запуск скрипта??? Т.е. если скрипт уже выполняет задачу, чтобы даже если мы пытаемся запустить его еще раз он сразу завершал попытку и не грузился 30 секунд.
  • Вопрос задан
  • 1452 просмотра
Подписаться 3 Простой 7 комментариев
Решение пользователя Алексей Уколов К ответам на вопрос (6)
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Лучше всего, вместо костылей из файлов, использовать готовый инструмент: https://www.php.net/manual/ru/class.syncmutex.php
Ответ написан