PHP продолжить выполнение после выхода из страницы - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть простой скрипт, который считает от 1 до 5000 с циклом for. Он сбрасывает вывод в реальном времени в браузер и показывает индикатор выполнения с%.

Что у меня есть: если я покидаю страницу, процесс прерывается. Если я вернусь, он начинается с 0.

Чего я хочу добиться: если я покину страницу, процесс продолжится и, если я вернусь, отобразит правильный процент.

Пример: я запускаю процесс, он считает до 54, я покидаю страницу на 10 секунд, когда я возвращаюсь, он показывает мне 140 и продолжает сбрасывать.

Возможно ли это?

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

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

Нечто подобное может подойти.

<?php
session_start();
$s = &$_SESSION;

$sleep = 1; //seconds

//check if we have a value set in session before, if not set default = 0.
if(!isset($s['last'])){
    $s['last'] = 0;
}

//check if we have a last time set in session before. if not set a default = curret time.
if(!isset($s['time'])){
    $s['time'] = time();
}

//get the idle time of the user.
$idle = time() - $s['time'];

//start the loop..and set starting point.
$start = $s['last'] + ($idle / $sleep);

for( $i = $start; $i < 100; $i++){
    echo $i . '<br />';
    $s['last']++;
    $s['time'] = time();
    flush();
    sleep($sleep);
}

Надеюсь, это поможет !!

0 голосов
/ 10 сентября 2018

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

Самый распространенный способ сделать это - использование очередей сообщений (RabbitMQ, Qless и т. Д.). Событие должно инициироваться сценарием в веб-контексте, но фактическое задание должно выполняться слушателем очереди в другом контексте.

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