У меня есть несколько сценариев, которые повторяют прогресс, когда они выполняются, потому что они долго работают. Каждый из них в конце каждого цикла обрабатываемых строк обрабатывает следующее:
echo '.';
@ob_flush();
flush();
Это работало отлично в течение многих лет, а затем я обновился до PHP 5.3.x и Apache 2.2.x на нескольких серверах. Теперь, даже если я набиваю буфер с пробелом или устанавливаю "ob_implicit_flush (1)", я не могу заставить его отображать вывод по команде.
Один сервер по-прежнему показывает вывод, но он находится в кусках. Это может занять почти 5 минут, а затем на экране появляется строка точек. С другими серверами я ничего не получаю, пока script не закончит выполнение полностью.
Я пробовал просматривать файлы php.ini и httpd.conf, чтобы узнать, могу ли я понять, что изменилось между разными серверами, но я, очевидно, что-то пропустил.
Я также попытался отключить mod_deflate в .htaccess для затронутых скриптов, но это тоже не помогает (отключив mod_gzip, чтобы устранить проблему сразу).
Может ли кто-нибудь указать мне в правильном направлении с этим, пожалуйста? Невозможность отслеживать выполнение script в реальном времени вызывает всевозможные проблемы, но мы больше не можем оставаться на этих более старых версиях PHP.
В еще более своеобразной заметке я попытался понизить сервер до PHP 5.2.17, но проблема с выходным буфером осталась после понижения. Это заставляет меня подозревать, что это связано с тем, как Apache обрабатывает выход PHP, поскольку Apache 2 остался на месте.