PHP буферизованный вывод в зависимости от настроек сервера? - PullRequest
2 голосов
/ 17 июня 2011

Я использую следующий код для создания буферизованного вывода в сценарии обслуживания БД:

function flush_buffers($string){
    echo $string;
    ob_end_flush();
    ob_flush();
    flush();
    ob_start();

}

Хотя это работает, как и ожидалось, на моем локальном сервере Wamp, показывая вывод при каждом вызове функции, но не на веб-сервере онлайн: здесь вывод отправляется только после завершения сценария. Как это?

1 Ответ

4 голосов
/ 17 июня 2011

Убедитесь, что выходная буферизация отключена в вашем файле php.ini на веб-сервере.

Вам также не нужно каждый раз промывать вручную, вы можете использовать:

ob_implicit_flush(true);
ob_end_flush();

Вы также должны помнить, что это все еще зависит от браузера. Браузер решит, показывать ли вывод. Некоторые браузеры (например, IE6) ничего не выводят, пока не будет достаточно символов для вывода.

Следующее отключит все, что может вызвать нежелательную буферизацию вывода.

@apache_setenv('no-gzip', 1);
@ini_set('zlib.output_compression', 0);
@ini_set('implicit_flush', 1);
for ($i = 0; $i < ob_get_level(); $i++) { ob_end_flush(); }
ob_implicit_flush(1);
...