|
|
|
| Скрипт должен быстро вернуть результат обработки GET параметров,
вообще-то он укладывается в максимально допустимые рамки по времен, хоть и с трудом.
Однако, с полученными данными надо ещё проделать несколько действий: записать их в базу, пересчитать пару таблиц итд.
Если скрипт будет делать это сам, то задержка с ответом будет недопустимо большой.
Как вариант я хочу попробовать написать отдельный скрипт для всей этой вспомогательной работы, который вызывался бы из первого скрипта,
но
мне надо чтобы первый скрипт не дожидался второго, а сразу завершался.
Как это проще сделать? | |
|
|
|
|
|
|
|
для: Eugene77
(15.06.2012 в 21:23)
| | Самый простой вариант, если конфигурация сервера позволяет, запускать его через exec (); там лимит времени выполнения вроде как не действует. Во всяком случае у меня на сервере работает. Чтобы не дожидаться завершения, перенаправить поток вывода в /dev/null. Это на linux, на windows не знаю. | |
|
|
|
|
|
|
|
для: Eugene77
(15.06.2012 в 21:23)
| | Есть расширение PCNTL которое должно помочь в решении. И это наверно самый првильный вариант. У самого времени не хватало разобраться, проще через exec (); | |
|
|
|
|
|
|
|
для: MHz
(15.06.2012 в 23:46)
| | >Есть расширение PCNTL
Не, мне под Windows надо. | |
|
|
|
|
|
|
|
для: Eugene77
(16.06.2012 в 09:24)
| | Как вариант еще можно запускать скрипт через fclose (fopen ('htt://__URL__')), в скрипте использовать ignore_user_abort (); Но тогда нужно следить за временем выполнения и когда оно подходит к лимиту скрипт должен будет запускать сам себя. | |
|
|
|
|
|
|
|
для: Eugene77
(15.06.2012 в 21:23)
| | Наверное "отсоединить" клиента и продолжить работу просто так не получится.
Часто делают так: скрипт записывает в журнал новое задание, быстро отдаёт ответ клиенту и завершается, а другой скрипт по крону исполняет задание из журнала. Простое и надежное решение. | |
|
|
|
|
|
|
|
для: Саня
(16.06.2012 в 11:40)
| | >Наверное "отсоединить" клиента и продолжить работу просто так не получится.
Но вот этот вариант вроде выглядит многообещающе:
запускать скрипт через fclose (fopen ('htt://__URL__')), в скрипте использовать ignore_user_abort ();
|
Спасибо Mhz!
Или не всё так просто, как кажется, Саня? | |
|
|
|
|
|
|
|
для: Eugene77
(16.06.2012 в 19:54)
| | Всё просто. Юзеру прийдётся отсоединиться по своей воле, так и не дождавшись каких-либо результатов. Вроде как это противоречит исходной задаче. | |
|
|
|
|
|
|
|
для: Саня
(16.06.2012 в 21:52)
| | >Всё просто. Юзеру прийдётся отсоединиться по своей воле, так и не дождавшись каких-либо результатов. Вроде как это противоречит исходной задаче.
Почему?
После того, как будет fclose() скрипт можно завершить, и юзер получит всё, что ему надо на данный момнт, не отсоединяясь.
Тот же скрипт, который был запущен через fopen() продолжит свою работу если в нём указано:ignore_user_abort(), в итоге доделает всё, что должен.
Разве не так? | |
|
|
|