У меня есть скрипт, который работал в PHP5.3 для обработки буферизации для определенного файла журнала, но после обновления сервера до PHP5.5 он больше не работает. Вывод должен быть html, поэтому я надеялся просто сбросить вывод после каждого эха.
Это урезанная тестовая версия кода, который раньше работал …
@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);
set_time_limit(0);
echo 'Start ...<br />';
for( $i = 0 ; $i < 10 ; $i++ )
{
echo $i . '<br />';
flush();
ob_flush();
sleep(1);
}
echo 'End<br />';
Я подозреваю, что команды @ini_set не перекрывают настройки, и я просто надеюсь на простой пример, который очистит выходные буферы. Большинство примеров в Интернете более 6 лет назад, и ни один из них не работал. Я читал, что буферизация была переписана в PHP5.4, поэтому мне интересно, виноват ли это тоже?
Я проверил ваш скрипт и сделал некоторые исправления / улучшения
@apache_setenv('no-gzip', 1);
@ini_set('zlib.output_compression', 0);
// you can dismiss this configuration, the bellow explanation is from the php.ini itself
/* Implicit flush tells PHP to tell the output layer to flush itself
automatically after every output block. This is equivalent to calling the
PHP function flush() after each and every call to print() or echo() and each
and every HTML block.
*/
@ini_set('implicit_flush', 1);
for ($i = 0; $i < ob_get_level(); $i++) { ob_end_flush(); }
ob_implicit_flush(1);
set_time_limit(0);
echo 'Start ...<br />';
for( $i = 0 ; $i < 10 ; $i++ )
{
// put the bellow php code if the user browser is Firefox, Internet Explorer or Safari
// Google Chrome just works fine with it but it do not need
echo str_repeat(" ", 1024);
echo $i . '<br />';
flush();
// ob_flush(); you have used flush(), why using ob_flush() there is nothing to flush anymore
sleep(1);
}
echo 'End<br />';
Я не думаю, что обновление версии PHP вызывает проблемы, но я не уверен
Надеюсь, это поможет 🙂
Других решений пока нет …