Я думаю, вы путаете ob_flush()
с flush()
.В то время как ob_start()
и ob_flush()
обрабатывают внутренний буфер вывода PHP, который перехватывает все выходные данные, flush()
- это обычная функция, которая сбрасывает STDOUT
, как и в других языках программирования.
Пример:
<?php
ob_start();
echo "Foobar\nFoobar\nFoobar\n";
// Nothing printed yet
ob_flush(); // Now it is printed.
echo "Foobar\n"; // Printed directly, because contains a line ending.
echo "Foobar"; // Not printed, because normally buffers are flushed on line endings
flush(); // Printed.
РЕДАКТИРОВАТЬ:
Ваш вывод не распечатывается, потому что ваш веб-сервер может буферизовать содержимое.Попробуйте отключить сжатие и буферизацию вывода:
@apache_setenv('no-gzip', 1);
@ini_set('zlib.output_compression', 0);
@ini_set('implicit_flush', 1);
Также имейте в виду, что Safari и Internet Explorer имеют внутренний буфер 1 КБ.Поэтому вам необходимо добавить 1 КБ данных заполнения (например, пробелов), чтобы они отображались.
РЕДАКТИРОВАТЬ 2: Ваша реализация нарушена.Вы хотите опросить свои данные с помощью AJAX.Используйте jQuery на стороне клиента:
<div id="counter">0%</div>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js">
<script type="text/javascript">
function doPoll(){
$.post('script-that-returns-stuff.php', function(data) {
$("#counter").html(data);
setTimeout(doPoll,5000);
});
}
doPoll();
</script>
Затем в script-that-returns-stuff.php
:
<?php
$file = explode("\n", file_get_contents("/tmp/output.txt"));
$last_line = $file[count($file)-1];
echo $last_line."%";