Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Выполнение php-скрипта после разрыва соеденения


Рекомендуемые сообщения

Задача:

Из браузера через AJAX запрашивается php-приложение, которое возвращает в клиент возможен ли сейчас запуск и после соеденение с браузером должно быть закрыто, но приложение должно продолжать свою работу.

Собственно пробовал решать через register_shutdown_function но столкнулся с проблемой, что соеденение с браузером не разрывается пока функция не закончит свою работу или пока не наступит таймаут, также есть проблема, что вопреки утверждениям документации shutdown-функция прерывает свою работу при таймауте.

Я конечно могу сделать abort соеденения со стороны клиента, так как скрипт запускается через AJAX и соеденение находится под полным управлением JavaScript но при таком подходе надо регулярно проверять получаемые от сервера данные на наличие признака конца данных, что имхо не есть хорошо.

Пока что мне видятся два пути решения:

Первый - искуственно разорвать соеденение с клиентом не прирывая выполнения скрипта (вопрос как?), а затем еще заставить php проигнорировать таймаут, даже если функция set_time_limit запрещена настройками.

Второй - запустить файл php в консольном режиме, где его работа не зависит от браузера (надеюсь основной скрипт не надумает ждать завершения вызванного процесса?), а таймаут отсутствует, но я не нашел как получить путь к интерпертатору php (наверняка гдето спрятано в $_SERVER или getenv() ?)

Какой вариант лучше, и как реализовывается?

Изменено пользователем Лорд Дмитрий
Ссылка на комментарий
Поделиться на другие сайты

Сегодня попробовал запуск приложения из пхп через exec

пхп дожидается его завершения, а после соображает что вышел его таймаут и прерывается, правда то что выполняется до конца - это плюс, но вот то что держит соеденение с браузером - минус :bleh:

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

Ссылка на комментарий
Поделиться на другие сайты

Во первых,

Про 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()

Удачи :)

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...