Отложенное выполнение php кода — стэк с таймаутами

Речь пойдет не о выполнении кода в потоке одного скрипта с таймаутами, а о задаче очередности некоего стека php кода в рамках некоего проекта с исполнением по таймаутам. Предположим есть некая строка в бд, которой необходимо проставить некий статус на заданное количество секунд и затем вернуть статусы на место. Напишем класс с функциями установки кода в стек, удаления кода из стека и выполнения кода по истечению таймаута. Код будем записывать в json файл, ключами массива сделаем microtime меточку и будем выполнять через eval вышедший по таймауту код:

Функция set принимает в аргументах строку кода и таймаут в секундах, через который он должен быть исполнен. Возвращает установленный ключ —  для того чтобы код можно было в случае чего удалить без исполнения по данному ключу функцией remove. Функция execute исполняет вышедший из заданного таймаута стек кодов. Блокировкой файла мы исключаем возможность повторного исполнения одного и того же кода.

Использование, добавляем код в стек на 122 секунды:

А в индексном файле проекта пропишем исполнение:

глобальную $mysqli добавил потому что она требуется в текущем проекте для запроса в бд, у вас же её может не быть.

UPD: обновил код и добавил функцию executeKey($key)

Функция нужна для того, чтобы вызвать по ключу(ключ возвращается функцией set) код прямо здесь и сейчас(без учета таймаута). Т.е. функция remove просто удаляет заданный код по ключу, без выполнения, а функция executeKey выполняет и удаляет код.

 

Оставить комментарий

Ваш адрес email не будет опубликован.