Можете ли вы сказать php-серверу прервать выполнение ранее запущенного скрипта?

Моя веб-страница использует вызов ajax для возврата данных из очень длинного php-скрипта, поэтому, если я выйду со страницы раньше и перезагружу страницу, этот php-скрипт все еще выполняется, что вызовет у меня проблемы.

Есть ли способ сказать серверу прервать выполнение предыдущего запроса ajax, если он все еще выполняется?

спасибо


person user954912    schedule 16.12.2011    source источник


Ответы (3)


Не напрямую. Вам нужно будет настроить схему, в которой работа разгружается внешнему (на веб-сервер) процессу, и этот процесс имеет канал связи с настроенным веб-сервером, который позволяет ему проверять, должен ли он отбрасывать то, что он делает каждый раз. так часто (например, простой, но не идеальной схемой будет проверка времени последнего изменения «файла блокировки»; если в прошлом прошло более X секунд, прервите задачу).

Затем ваша веб-страница вызовет скрипт, который затем «поддержит» фоновую задачу соответствующим образом (например, прикоснувшись к файлу блокировки из предыдущего примера).

Таким образом, когда задача инициируется через запрос AJAX, клиент начинает делать запросы «поддержания активности» на сервер, а сервер перенаправляет сообщение «поддержания активности» внешнему процессу. Если пользователь перезагружает страницу, запросы «поддержки активности» прекращаются, и рабочий процесс прерывается по истечении порога проверки активности. Если все пойдет хорошо и работа будет завершена, ваш сервер обнаружит это через канал связи, который у него есть с рабочим процессом, и сообщит об этом клиенту при следующем «пинге» проверки активности.

person Jon    schedule 16.12.2011

Возможно, попробуйте использовать функцию set_time_limit() для этого скрипта.

Или создайте несколько php-скриптов и случайным образом сгенерируйте для них URL-адрес.

person rtyshyk    schedule 16.12.2011

Вы пытались установить для объекта XMLHttpRequest значение null при перезагрузке страницы?

person D. Rattansingh    schedule 16.12.2011