Можете ли вы сказать php-серверу прервать выполнение ранее запущенного скрипта? - PullRequest
2 голосов
/ 16 декабря 2011

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

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

спасибо

Ответы [ 3 ]

0 голосов
/ 16 декабря 2011

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

0 голосов
/ 16 декабря 2011

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

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

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

0 голосов
/ 16 декабря 2011

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

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

...