Сведения о вопросе

Faridun

07:52, 15th August, 2020

Теги

PHP    

Отложенное выполнение кода в php

Просмотров: 379   Ответов: 14

Приветствую!

Столкнулся с таким вопросом — как реализовать следующее:

Пользователь заходит на страницу a.php, его перенаправляет на b.php и в то же время вызывается и выполняется c.php
C.php — ресурсоемкий скрипт, который хотелось бы выполнять в фоновом режиме, в то время как пользователь дальше занимался своими делами на b.php



  Сведения об ответе

qwerty101

03:14, 4th August, 2020

Можно так:
exec("/usr/bin/php /var/www/c.php > /dev/null &");
Тогда exec отпустит консоль и скрипт b.php будет выполняться дальше а c.php будет работать в бэкграунде.


  Сведения об ответе

COOL

04:25, 27th August, 2020

ZendX_Console_Process_Unix. Правда работает только на *никсах и требует php-расширения shmop, pcntl и posix. Зато прост в использовании, как валенок.


  Сведения об ответе

lats

15:40, 14th August, 2020

В b.php на стороне сервера посылаете POST-запрос (с помощью sockets) на c.php и закрываете соединение не ожидая ответа. Но для этого в c.php необходимо будет включить ignore_user_abort.


  Сведения об ответе

PHPH

09:04, 28th August, 2020

юзер зашел на страницу и запустился аякс пост-запрос, по-моему самое простое и логичное решение.


  Сведения об ответе

appple

10:07, 22nd August, 2020

c.php грузится аяксом или в iframe.

в скрипте settimelimit(0) чтоб убрать временной лимит

если задачу можно разделить «порция» то хорошо. тогда выполнять небольшими порциями тем же аяксом, тогда можно даже показывать идикатор загрузки.


  Сведения об ответе

crush

03:19, 2nd August, 2020

Зашли на a.php, создали файл task.txt со строчкой для параметров (если надо)
Затем по крону у нас запускается раз в миниту пхп скрипт-чекер файла task.txt, который и выполняет нужную команду
exec("/usr/bin/php /var/www/c.php > /dev/null ");


  Сведения об ответе

прога

02:55, 20th August, 2020

Посмотрите Gearman ( gearman.org/ ). Он как раз под такие цели подходит и есть интеграция с php. Обзорная статья — highload.com.ua/index.php/2010/07/09/gearman-и-php-асинхронные-задачи/


  Сведения об ответе

darknet

02:53, 20th August, 2020

ну, коль скоро про кроны речь зашла, то тогда man at


  Сведения об ответе

LIZA

11:53, 19th August, 2020

Если у вас собственный сервер или VPS используйте beanstalkd — это сервер очередей. Написан на Сях, простой, быстрый, достаточно много фичей вроде отложенной на заданное время задачи. Интерфейс к пыху — клиентский (не расширение), хотя по мне так можно свой на сокетах написать — протокол там очень простой


  Сведения об ответе

9090

19:34, 15th August, 2020

Поисковые боты и рядовые посетители не особо-то щадят ваш веб-сервер. Оптимизированный ежеминутный крон-запрос затеряется на их фоне. Если нет обязательного соединения с БД при любом клиентском запросе + флаг наличия задач в очереди висит в кеше (memcached, файл и т.п.), то эта нагрузка не будет критичной.


  Сведения об ответе

JUST___

04:37, 10th August, 2020

fpm — «fastcgi_finish_request() — special function to finish request and flush all data while continuing to do something time-consuming»


  Сведения об ответе

SSESION

01:20, 27th August, 2020

юзер зашел на страницу и запустился аякс пост-запрос, по-моему самое простое и логичное решение.


  Сведения об ответе

LAST

19:31, 16th August, 2020

что бы парралельно выполнять скрипт с в фоновом режиме, есть такая штука как потоки.
В syphony есть годная реализация — Process
В проект встраивается очень просто.
Запустите в b.php отдельный процесс когда вам будет нужно, при этом если вдруг c.php упадёт b продолжит выполняться


  Сведения об ответе

dump

07:00, 11th August, 2020

Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться