@carryx
MySQL Developer

Как реализовать PHP отдельным «процессом»?

У меня админка на PHP. По кнопке выполняется обработка файлом и вноска в базу данных с кучей сложных проверок, данное действие может отрабатывать даже по 15 минут (в зависимости от кол-ва файлов)
Проблема в том, что когда много файлов в обработке, скрипт соответственно работает дольше обычного.
В ответ я получаю:
504 Gateway Time-out
nginx
Как сделать, чтобы все это дело выполнялось отдельно от браузера. Т.е. я нажимаю кнопку "Обработать" и все. Дальше само все работает, а я занимаюсь другими делами по базе.
  • Вопрос задан
  • 235 просмотров
Пригласить эксперта
Ответы на вопрос 6
BuriK666
@BuriK666
Компьютерный псих
fastcgi_finish_request
Либо по крону запускайте выполнение долгих действий (следите чтоб несколько копий одновременно не запустилось)
Либо отдельный демон.
Ответ написан
Комментировать
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Php и так запускается отдельным процессом. Скорее всего, дело в том, что у вас сессия блокируется и вам нужно перед долгими действиями вызывать session_write_close().
Ответ написан
Комментировать
Используйте сервер очередей
Ответ написан
Комментировать
@Oldy777
Попробуйте форкнуть процесс по помощью pcntl_fork и остановить родительский.
Ответ написан
Комментировать
Pinsky
@Pinsky
Кофеиноникотиновая смесь в backend-код
Beanstalkd(очередь сообщений) думаю вам будет полезен.
Выполняйте обработку в отдельном потоке - либо по крону, либо в демоне.
Ответ написан
Комментировать
@khrisanfov
Программист
На кнопку "Обработать" выполняйте
<?php
system("nohup php /var/www/путь_до_скрипта.php > ./log 2>&1 &");

Данный скрипт запустит демона. Весь вывод скрипта будет записываться в log файл.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы