поэтому я попытался показать результаты, пока скрипт все еще выполняется
но по какой-то причине он не работает, поэтому вот что я до сих пор:
ob_start(); include "../../common.php"; set_time_limit (0); $start = (string) $_GET['start']; $end = (string) $_GET['end']; for($i = $start; strcmp($i, $end); $i = bcadd($i, 1)){ echo $i; ob_flush(); } ob_end_flush();
ОБНОВЛЕННЫЙ КОД
* Заметьте, что этот код еще не работает!
set_time_limit(0); $start = $_GET['start']; $end = $_GET['end']; for(;$start < $end;$start++){ $content = file_get_contents("[some internal page]"); echo $content; usleep(10); flush(); }
Попробуйте добавить вызов flush()
после вызова ob_flush()
. Это будет работать, только если ваш сервер настроен так, чтобы он мог это сделать, и не гарантирует, что клиент будет обрабатывать его разумно, но это ваш лучший выбор.
Одна точка привязки, с которой я столкнулся, заключается в том, что у вас установлено zlib.output_compression, которое вы абсолютно не можете сделать, полная остановка. Процесс сжатия вывода zlib запускается до того, как любой из ваших кодов будет выполнен и не будет контролироваться вашим скриптом во время выполнения с помощью ini_set()
и т.п.
Обычно вам нужно вызвать flush()
и ob_flush()
. См .: http://php.net/manual/en/function.flush.php
Кроме того, вы не можете ничего сделать с буфером браузера на стороне клиента. Браузер будет хранить данные как можно дольше или меньше. Некоторые серверы также не могут поддерживать сброс своего буфера.
После ob_flush (); добавить flush (); Это фактически сбрасывает буфер записи и выходные буферы. ob_flush сбрасывается в буфер записи, flush () затем выталкивает его клиенту. Обычно, по крайней мере.