#php #javascript
Есть долгий скрипт на сервере который запускается через ajax, пытаюсь сделать для
него прогрессбар.
Скрипт на сервере запускается
session_start();
$_SESSION['process']=0;
session_write_close();
Что то там делает в процессе
foreach ($clear as $key => $array) {
$_SESSION['process'] = round(($key * 100 / $count)/2);
session_write_close();
//бла бла
}
Вторым запросом опрашиваю другой файл скрипта на сервере
session_start();
$array = array('process'=>$_SESSION['process']);
echo json_encode($array);
Но вот беда не работает так как хотелось бы, данные не обновляющийся, а если в цикле
добавить session_start(); то обновляются где то раз 50 и потом ошибка валит
net::ERR_RESPONSE_HEADERS_TOO_BIG
Нашел ответ https://stackoverflow.com/questions/17186675/why-i-get-err-response-headers-too-big-on-chrome
header_remove ("Set-Cookie");
Читал на хабре в комментах писали что так не стоит делать, дабы вопросу не пропадать,
как стоит делать?
Ответы
Ответ 1
Наиболее простой вариант, который напрашивается исходя из вашей текущей архитектуры - писать % во временный файл, из него читать 2м скриптом, удалять его по окончании срипта. Более красивое решение: Страница с ajax:Выполнено: 0%
Серверный скриптОтвет 2
Пишете статус в БД – это самое простое. Или используйте потоки и вебсокетыОтвет 3
Вы можете использовать long-pooling: 1. Создавать запрос к php скрипту, который не закрывает соединение; 2. Отправлять ответ только при изменении статуса; 3. На стороне клиента после получения ответа создавать новый запрос. php-long-polling — вот пример технологии, возможно это overkill, но если отображение статуса так важно, то почему нет?
Комментариев нет:
Отправить комментарий