Есть скрипт, который должен обработать огромную кучу данных. За один заход он обрабатывает ограниченное количество, чтобы пролезть и по памяти, и по времени. По окончанию обработки, если еще остались данные, скрипт обновляется через header();
Но мстительный firefox банит перенаправления на этот же скрипт. Что делать?
UPD:
header("Cache-Control: no-cache");
не помог
redirect( "[censored]&".time() );
не помог. redirect — самописная функция с header location и exit
РЕШЕНИЕ:
Обновляю страницу с помощью тега , попутно выводя информацию о состоянии процесса.
Алексей Рахе: так запускайте консольный скрипт из веб, через вызов system или подобной функции... Пользователь не должен ждать ответа, просто сообщить ему что процесс в обработки и т.д
Алексей Рахе: А вообще с header, Вас любой браузер прервет за редиректы, к примеру хром через 21 редирет обрывает соеденение...
Так что между редиректами должен быть полюбому какой-то вывод, иначе не как... Так, что решение только через мета тег.
<?
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
/**
* Constructs the SSE data format and flushes that data to the client.
*
* @param string $id Timestamp/id of this connection.
* @param string $msg Line of text that should be transmitted.
*/
function sendMsg($id, $msg) {
echo "id: $id" . PHP_EOL;
echo "data: $msg" . PHP_EOL;
echo PHP_EOL;
ob_flush();
flush();
}
$serverTime = time();
while(1){
sendMsg($serverTime, 'server time: ' . date("h:i:s", time()));
sleep(0.99);
}
?>
Алексей Рахе: Никаких сокетов и прочих вкусняшек не нужно. При истечении времени выполнения скрипта автоматом произойдет реконнект. Только правда ie не поддерживает никакой.