PHP продолжает выполнять скрипт, но перенаправить клиента в другое место - PullRequest
1 голос
/ 13 марта 2019

В сочетании с использованием

ignore_user_abort(true);
set_time_limit(0);

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

Представьте, что пользователь только что отправилдлинная форма, и теперь происходит несколько операций

Сначала данные проверяются. В случае неудачи пользователю отправляется электронное письмо с объяснением причины неудачи. В случае успеха мы переходим к следующему шагу

Теперь видео, которое былоОтправленный в форму отправляется на наш видеосервер. В случае неудачи отправляется электронное письмо. В случае успеха перейдите к следующему шагу

Теперь пользователь добавляется в качестве контакта в нашу CRM. В случае неудачи электронное письмо отправляется. В случае успеха перейдите к следующему шагу

Теперь все пользовательские данные заносятся в базу данных. В случае неудачи отправляется электронное письмо. В случае успеха электронное письмо отправляется, и пользователь перенаправляется на следующую страницу.

.немедленно перенаправляется на следующую страницу, пока сервер обрабатывает все

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Используйте AJAX для отправки запроса, но вместо ожидания ответа используйте javascript для перенаправления на следующую страницу.

Если у вас есть JQuery:

<script>

$('#submitButtonId').click( function() {
    $.ajax({
        url: 'some-url',
        type: 'post',
        // dataType: 'json', 
        data: $('form#myForm').serialize(),
        success: function(data) {
          // do nothing      
        }
    });

    // redirect
    window.location.href = "http://your_redirect";
});

</script>
0 голосов
/ 13 марта 2019

Для длительных процессов используйте асинхронный метод.Используйте любую очередь RabbitMQ / Kafka, добавьте свой запрос в очередь и перенаправьте пользователя на другую страницу.Теперь на стороне сервера потребитель может получить запрос из очереди, обработать запрос и уведомить пользователя.Это также может быть достигнуто с помощью MySql, используя MySql в качестве очереди, но это крайне не рекомендуется в отношении блокировок и периодического сканирования запросов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...