У меня есть скрипт, который работал в 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 вызывает проблему, но я не уверен
Надеюсь, это поможет 🙂