Интересует вопрос как можно реализовать задуманное: Пользователь нажимает кнопку "Сбор данных", на фоне запускается мой скрипт, он делает свою работу, все записывает в бд, при этом пользователь может спокойно дальше гулять по сайту, а на странице где был запущен скрипт должна появится надпись "Собираем данные" например.
Буду рад любым статьям или примерам!
Вариант 1. Если у вас fast-cgi + php-fpm на сервере, то можно использовать функцию fastcgi_finish_request();
она отдает ответ браузеру, при этом скрипт продолжает выполняться на сервере, периодически записывая куда-то состояние выполнения задачи
Вариант 2. Серверы очередей (например rabbitMQ). Ваш web-скрипт бросает задачу в очередь. Отдельно запущенный на сервере скрипт мониторит очередь и выполняет появившуюся задачу, периодически записывая куда-то состояние выполнения задачи
Вариант 3. На сервере, на локалхосте и неиспользуемом порту запускаете еще один веб-сервер, с большими параметрами таймаута на выполнение скриптов. Ваш скрипт просто бросает задачу на 127.0.0.1:8888 и рапортует о постановке задачи. На локальном же сервере происходит выполнение, периодически записывая куда-то состояние выполнения задачи
Вариант 4. Добавляете задачу в некий список. По крону запускается скрипт, который выполняет их по списку, периодически записывая куда-то состояние выполнения задачи
Наиболее очевидное решение - ставится задача, PHP закидывает её в RabbitMQ. Из RabbitMQ её подхватывает подписанный на очередь демон, после чего выполняет и выставляет флаг, что задача выполнена. Можно в Redis по ID задачи или какому-то другому идентификатору, а можно прямо в базе.
Делается так:
Ну и выполнять это все можно с помощью cron
Виртуальный выделенный сервер (VDS) становится отличным выбором
В $table->timestamps(); создает два поля: create_at , update_atНо они по дефолту равны 0
Хочу написать своего бота для группы, но он не отправляет сообщения