Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Запуск скрипта через exec без зависания браузера
Форумы портала PHP.SU » » Вопросы новичков » Запуск скрипта через exec без зависания браузера

Страниц (1): [1]
 

1. Nyam - 02 Февраля, 2018 - 16:13:51 - перейти к сообщению
Здравствуйте, столкнулся с небольшой проблемой при запуске функции, которая должна выполняться в фоне после определенного действия пользователя. Так как по завершению функции от неё не нужны никакие данные и тд., хотелось бы чтобы пользователь во время выполнения функции мог без проблем пользоваться сайтом. Фоновый запуск функции реализовал через exec('/usr/bin/php test.php &'); но при этом браузер по прежнему ждет завершения функции и не дает пользователю нормально использовать сайт.

Прошу вас подсказать как сделать выполнение полностью в фоне для пользователя.

Заранее всем спасибо.
2. Мелкий - 02 Февраля, 2018 - 18:38:46 - перейти к сообщению
С веба кладёте задачу в очередь pgq, gearman, rabbitmq или чего ещё больше нравится.
Кроном или написанным демоном вычитываете задачу, выполняете, затем хватаете следующую и выполняете

Такой подход нормально переживает пики активности вместо DoS всего сервиса.
3. Nyam - 02 Февраля, 2018 - 20:05:39 - перейти к сообщению
Мелкий пишет:
С веба кладёте задачу в очередь pgq, gearman, rabbitmq или чего ещё больше нравится.
Кроном или написанным демоном вычитываете задачу, выполняете, затем хватаете следующую и выполняете

Такой подход нормально переживает пики активности вместо DoS всего сервиса.


А возможно сделать без крона ?
4. Sail - 03 Февраля, 2018 - 14:40:56 - перейти к сообщению
Nyam, например, можно инициировать выполнение той самой функции через ajax-запрос от клиента.
Или отправить клиенту (браузеру) header("location...") и спокойно продолжать дальше выполнение скрипта (той самой функции).
5. LIME - 03 Февраля, 2018 - 18:58:30 - перейти к сообщению
Sail пишет:
Nyam, например, можно инициировать выполнение той самой функции через ajax-запрос от клиента.
Мелкий пишет:
Такой подход нормально переживает пики активности вместо DoS всего сервиса.
это замечание к тс относится
всеже асинхронная обработка имеет свои плюсы
но есть и минусы
как говорится нет очереди нет проблем
6. Nyam - 04 Февраля, 2018 - 15:05:16 - перейти к сообщению
Sail пишет:
Nyam, например, можно инициировать выполнение той самой функции через ajax-запрос от клиента.
Или отправить клиенту (браузеру) header("location...") и спокойно продолжать дальше выполнение скрипта (той самой функции).


Как я понимаю header("location...") будет выполняться только уже после exec и в итоге ничего не изменится?
(Добавление)
LIME пишет:
Sail пишет:
Nyam, например, можно инициировать выполнение той самой функции через ajax-запрос от клиента.
Мелкий пишет:
Такой подход нормально переживает пики активности вместо DoS всего сервиса.
это замечание к тс относится
всеже асинхронная обработка имеет свои плюсы
но есть и минусы
как говорится нет очереди нет проблем


Нагрузка на сервер не будет, так как если уже данный скрипт запущен, другие пользователи не могут его запускать, пока не выполнится предыдущий.
7. Sail - 04 Февраля, 2018 - 15:29:33 - перейти к сообщению
Nyam пишет:
Как я понимаю header("location...") будет выполняться только уже после exec и в итоге ничего не изменится?

Наоборот.
8. Nyam - 05 Февраля, 2018 - 22:05:55 - перейти к сообщению
Sail пишет:
Nyam пишет:
Как я понимаю header("location...") будет выполняться только уже после exec и в итоге ничего не изменится?

Наоборот.


Спасибо большое!
9. Nyam - 10 Февраля, 2018 - 14:34:31 - перейти к сообщению
Sail пишет:
Nyam пишет:
Как я понимаю header("location...") будет выполняться только уже после exec и в итоге ничего не изменится?

Наоборот.


Проверил, оказалось что не работает, по прежнему браузер блочится.
10. Nyam - 11 Февраля, 2018 - 20:44:26 - перейти к сообщению
Больше нету идей как можно решить проблему ? (
11. LIME - 12 Февраля, 2018 - 03:55:19 - перейти к сообщению
Nyam пишет:

Проверил, оказалось что не работает, по прежнему браузер блочится.

вот это новость
Nyam пишет:
Больше нету идей как можно решить проблему ? (
асинхронная обработка
мелкого слушай
вот что тебе непонятно?
хочешь и рыбку сьесть и рыбку сьесть?
12. Nyam - 13 Февраля, 2018 - 05:05:27 - перейти к сообщению
LIME пишет:
Nyam пишет:

Проверил, оказалось что не работает, по прежнему браузер блочится.

вот это новость
Nyam пишет:
Больше нету идей как можно решить проблему ? (
асинхронная обработка
мелкого слушай
вот что тебе непонятно?
хочешь и рыбку сьесть и рыбку сьесть?


Нет, хочу рыбку есть и компотом запивать.
При обращении к скрипту через exec а перед этим прописания хедера, по прежнему отвисает страница в браузере только после завершения выполнения скрипта, прописанного в exec.
13. Sail - 13 Февраля, 2018 - 21:07:44 - перейти к сообщению
Nyam пишет:
Больше нету идей как можно решить проблему ? (

Есть, конечно. Всё тот-же header. Только чуть другой: рецепт.
14. arbuzmaster - 19 Февраля, 2018 - 15:35:28 - перейти к сообщению
А что мешает вывести результат в далекое никуда? Радость
1. exec('/usr/bin/php test.php >/dev/null');
2.exec('wget -O /dev/null -q http://localhost/test.php >/dev/null &');
И пусть он там выполняется до потери пульса!

 

Powered by ExBB FM 1.0 RC1