Ф@РТОВЫЙ Опубликовано 17 апреля, 2009 Жалоба Поделиться Опубликовано 17 апреля, 2009 (изменено) Задача: Из браузера через AJAX запрашивается php-приложение, которое возвращает в клиент возможен ли сейчас запуск и после соеденение с браузером должно быть закрыто, но приложение должно продолжать свою работу. Собственно пробовал решать через register_shutdown_function но столкнулся с проблемой, что соеденение с браузером не разрывается пока функция не закончит свою работу или пока не наступит таймаут, также есть проблема, что вопреки утверждениям документации shutdown-функция прерывает свою работу при таймауте. Я конечно могу сделать abort соеденения со стороны клиента, так как скрипт запускается через AJAX и соеденение находится под полным управлением JavaScript но при таком подходе надо регулярно проверять получаемые от сервера данные на наличие признака конца данных, что имхо не есть хорошо. Пока что мне видятся два пути решения: Первый - искуственно разорвать соеденение с клиентом не прирывая выполнения скрипта (вопрос как?), а затем еще заставить php проигнорировать таймаут, даже если функция set_time_limit запрещена настройками. Второй - запустить файл php в консольном режиме, где его работа не зависит от браузера (надеюсь основной скрипт не надумает ждать завершения вызванного процесса?), а таймаут отсутствует, но я не нашел как получить путь к интерпертатору php (наверняка гдето спрятано в $_SERVER или getenv() ?) Какой вариант лучше, и как реализовывается? Изменено 17 апреля, 2009 пользователем Лорд Дмитрий Ссылка на комментарий Поделиться на другие сайты Поделиться
Ф@РТОВЫЙ Опубликовано 18 апреля, 2009 Автор Жалоба Поделиться Опубликовано 18 апреля, 2009 Сегодня попробовал запуск приложения из пхп через exec пхп дожидается его завершения, а после соображает что вышел его таймаут и прерывается, правда то что выполняется до конца - это плюс, но вот то что держит соеденение с браузером - минус :bleh: должен же быть способ работы пхп-скрипта после разрыва соеденения с браузером Ссылка на комментарий Поделиться на другие сайты Поделиться
Darhazer Опубликовано 21 апреля, 2009 Жалоба Поделиться Опубликовано 21 апреля, 2009 Во первых, Про timeout. У shutdown_function есть таймоут, просто он начинаеть считать с нуля. Т.е. если скрипт работал 30 секунд и timeout его установил, вызиваеться shutdown_function и у нее еще 30 секунд. Во вторых, не пробувал, но в документации прописано: Note: If a program is started with this function, in order for it to continue running in the background, the output of the program must be redirected to a file or another output stream. Failing to do so will cause PHP to hang until the execution of the program ends. Наконец, если так не работаеть, можно юзать popen() / procopen() Удачи :) Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти