Apache / PHP кеширование - PullRequest
       13

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

7 голосов
/ 13 августа 2010

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

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

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

Спасибо, J

1 Ответ

1 голос
/ 14 августа 2010

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

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

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

...