Как продолжить, процесс после ответа к ajax запрашивают в PHP?

В то время как Отладка. Повреждение () строка сверх стека вызовов, Вы не можете выражения оценки. Поэтому та строка оптимизирована. Нажмите F10 для перемещения в следующую строку - будет работать допустимая строка кода - и часы.

11
задан bottleboot 11 March 2013 в 16:39
поделиться

3 ответа

Создает фоновый процесс и возвращает идентификатор фонового процесса, чтобы пользователь мог проверить его позже через какой-то секретный URL.

2
ответ дан 3 December 2019 в 06:22
поделиться

The ignore_user_abort directive, and ignore_user_abort function are probably what you are looking for : it should allow you to send the response to the browser, and, after that, still run some calculations on your server.

This article about it might interest you : How to Use ignore_user_abort() to Do Processing Out of Band ; quoting :
EDIT 2010-03-22 : removed the link (was pointing to http:// ! waynepan.com/2007/10/11/ ! how-to-use-ignore_user_abort-to-do-process-out-of-band/ -- remove the spaces and ! if you want to try ), after seeing the comment of @Joel.

Basically, when you use ignore_user_abort(true) in your php script, the script will continue работает, даже если пользователь нажал кнопку esc или остановитесь в своем браузере. Как ты использовать этот?
Одно из возможных применений - вернуть контент пользователю и разрешить соединение должно быть закрыто, пока обработка вещей, которые не требуют взаимодействие с пользователем.

В следующем примере отправляется $ response пользователю, закрытие соединение (делая браузер остановка спиннера / загрузочной планки), а затем выполняет do_function_that_takes_five_mins ();

И приведенный пример:

ignore_user_abort(true);
header("Connection: close");
header("Content-Length: " . mb_strlen($response));
echo $response;
flush();
do_function_that_takes_five_mins();

(Есть еще кое-что, что я не копировал и вставлял)


Обратите внимание, что ваш PHP-скрипт все еще должен соответствовать max_execution_time и ограничения memory_limit - это означает, что вы не должны использовать это для манипуляций, которые занимают слишком много времени.

Это также будет использовать один процесс Apache - что означает, что вы не должны есть десятки страниц, которые делают это одновременно.

Тем не менее, я полагаю, хороший трюк для повышения удобства использования; -)

16
ответ дан 3 December 2019 в 06:22
поделиться

Вам нужен вызов flush(), чтобы ответ немедленно отправлялся в браузер.

-1
ответ дан 3 December 2019 в 06:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: