Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как запустить скрипт, а самому завершиться?
 
 автор: Eugene77   (15.06.2012 в 21:23)   письмо автору
 
 

Скрипт должен быстро вернуть результат обработки GET параметров,
вообще-то он укладывается в максимально допустимые рамки по времен, хоть и с трудом.

Однако, с полученными данными надо ещё проделать несколько действий: записать их в базу, пересчитать пару таблиц итд.
Если скрипт будет делать это сам, то задержка с ответом будет недопустимо большой.

Как вариант я хочу попробовать написать отдельный скрипт для всей этой вспомогательной работы, который вызывался бы из первого скрипта,

но

мне надо чтобы первый скрипт не дожидался второго, а сразу завершался.
Как это проще сделать?

  Ответить  
 
 автор: MHz   (15.06.2012 в 23:40)   письмо автору
 
   для: Eugene77   (15.06.2012 в 21:23)
 

Самый простой вариант, если конфигурация сервера позволяет, запускать его через exec (); там лимит времени выполнения вроде как не действует. Во всяком случае у меня на сервере работает. Чтобы не дожидаться завершения, перенаправить поток вывода в /dev/null. Это на linux, на windows не знаю.

  Ответить  
 
 автор: MHz   (15.06.2012 в 23:46)   письмо автору
 
   для: Eugene77   (15.06.2012 в 21:23)
 

Есть расширение PCNTL которое должно помочь в решении. И это наверно самый првильный вариант. У самого времени не хватало разобраться, проще через exec ();

  Ответить  
 
 автор: Eugene77   (16.06.2012 в 09:24)   письмо автору
 
   для: MHz   (15.06.2012 в 23:46)
 

>Есть расширение PCNTL

Не, мне под Windows надо.

  Ответить  
 
 автор: MHz   (16.06.2012 в 09:32)   письмо автору
 
   для: Eugene77   (16.06.2012 в 09:24)
 

Как вариант еще можно запускать скрипт через fclose (fopen ('htt://__URL__')), в скрипте использовать ignore_user_abort (); Но тогда нужно следить за временем выполнения и когда оно подходит к лимиту скрипт должен будет запускать сам себя.

  Ответить  
 
 автор: Саня   (16.06.2012 в 11:40)   письмо автору
 
   для: Eugene77   (15.06.2012 в 21:23)
 

Наверное "отсоединить" клиента и продолжить работу просто так не получится.
Часто делают так: скрипт записывает в журнал новое задание, быстро отдаёт ответ клиенту и завершается, а другой скрипт по крону исполняет задание из журнала. Простое и надежное решение.

  Ответить  
 
 автор: Eugene77   (16.06.2012 в 19:54)   письмо автору
 
   для: Саня   (16.06.2012 в 11:40)
 

>Наверное "отсоединить" клиента и продолжить работу просто так не получится.

Но вот этот вариант вроде выглядит многообещающе:
запускать скрипт через fclose (fopen ('htt://__URL__')), в скрипте использовать ignore_user_abort (); 

Спасибо Mhz!

Или не всё так просто, как кажется, Саня?

  Ответить  
 
 автор: Саня   (16.06.2012 в 21:52)   письмо автору
 
   для: Eugene77   (16.06.2012 в 19:54)
 

Всё просто. Юзеру прийдётся отсоединиться по своей воле, так и не дождавшись каких-либо результатов. Вроде как это противоречит исходной задаче.

  Ответить  
 
 автор: Eugene77   (17.06.2012 в 11:22)   письмо автору
 
   для: Саня   (16.06.2012 в 21:52)
 

>Всё просто. Юзеру прийдётся отсоединиться по своей воле, так и не дождавшись каких-либо результатов. Вроде как это противоречит исходной задаче.
Почему?
После того, как будет fclose() скрипт можно завершить, и юзер получит всё, что ему надо на данный момнт, не отсоединяясь.

Тот же скрипт, который был запущен через fopen() продолжит свою работу если в нём указано:ignore_user_abort(), в итоге доделает всё, что должен.

Разве не так?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования