Я работаю над Сценарием PHP, который генерирует большой (мульти-МБ) вывод на лету, не зная длины заранее. Я пишу непосредственно в php://output
через fwrite()
и попробовали и стандартный вывод и использование Transfer-Encoding: chunked
(кодирование блоков как требуется), но то независимо от того, что я пробую браузер, ожидает, пока все данные не записаны прежде, чем отобразить диалоговое окно загрузки. Я попробовал flush()
луг также после заголовков и после каждого блока, но это также не имеет никакого значения.
Я предполагаю, что Apache кэширует вывод, поскольку браузер обычно отображал бы после получения некоторых КБ с сервера.
У кого-либо есть какие-либо идеи о том, как остановить это кэширование и сбросить данные к браузеру, поскольку это сгенерировано?
Спасибо, J
Прежде всего, как упомянул BlaM в своем комментарии, если в конфигурации PHP включен OutputBuffering, он не будет работать, поэтому было бы полезно знать ваш phpinfo ().
Затем попробуйте, если он работает с большим файлом, который хранится на вашем веб-сервере, выведите его с помощью файла чтения. И вместе с этим проверьте, правильно ли вы отправляете заголовки. Подсказки о том, как использовать readfile () и отправлять правильные заголовки, приведены здесь: StackOverflow: Как принудительно загрузить файл в PHP
И пока вы на нем, вызовите ob_end_flush () или ob_end_clean () вверху вашего скрипта.