Apache / кэширование вывода PHP

Я работаю над Сценарием PHP, который генерирует большой (мульти-МБ) вывод на лету, не зная длины заранее. Я пишу непосредственно в php://output через fwrite() и попробовали и стандартный вывод и использование Transfer-Encoding: chunked (кодирование блоков как требуется), но то независимо от того, что я пробую браузер, ожидает, пока все данные не записаны прежде, чем отобразить диалоговое окно загрузки. Я попробовал flush()луг также после заголовков и после каждого блока, но это также не имеет никакого значения.

Я предполагаю, что Apache кэширует вывод, поскольку браузер обычно отображал бы после получения некоторых КБ с сервера.

У кого-либо есть какие-либо идеи о том, как остановить это кэширование и сбросить данные к браузеру, поскольку это сгенерировано?

Спасибо, J

7
задан JWood 13 August 2010 в 09:51
поделиться

1 ответ

Прежде всего, как упомянул BlaM в своем комментарии, если в конфигурации PHP включен OutputBuffering, он не будет работать, поэтому было бы полезно знать ваш phpinfo ().

Затем попробуйте, если он работает с большим файлом, который хранится на вашем веб-сервере, выведите его с помощью файла чтения. И вместе с этим проверьте, правильно ли вы отправляете заголовки. Подсказки о том, как использовать readfile () и отправлять правильные заголовки, приведены здесь: StackOverflow: Как принудительно загрузить файл в PHP

И пока вы на нем, вызовите ob_end_flush () или ob_end_clean () вверху вашего скрипта.

1
ответ дан 7 December 2019 в 20:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: