PHP:/ Допиливаем Flush() напильником.
Зачем это надо. Вывод данных из php скрипта идет не потоком, а некоторыми порциями, то есть буфферезировано. Если, к примеру, вам необходимо отдать всю информацию прямо сейчас. А в случаях с большими обьемами обработки, это актуально. Вы должны вызвать комманду flush(). Это в теории. А на практитке
Это не работает. Как ни странно. После недолгих раздумий и копания в мануалах, было найдено несколько преград.
Первым на пути к юзверю оказался Апач, который зачастую сам использует выходной буфер. Второй на пути, оказалась компрессия, которая сжимает все данные, исходящие с сервера, и позволяет нам экономить на трафике. Ну и на закуску, нас так же не понял браузер, который зачастую сам накапливает некоторый объем информации, прежде чем выдать её конечному пользователю.
Так как все преграды стали видны, то дело за малым.
Во первых выставляем два параметра, которые отключат сжатие трафика и выходной буфер.
ini_set('output_buffering', 0);
ini_set('zlib.output_compression', 0);
Вроде 1-0 в нашу пользу. Но дальше выясняется, что заветная функция, работает не так как нам надо. Пилим дальше. После некоторых размышлений, было принято решение заменить flush на вариант с "ручной" буфферизацией вывода. Так мы сможем полностью управлять выводом.
ob_start(); // включаем буфер
echo "Генерим нужные данные";
ob_flush(); // отдаем
ob_end_flush();
Теперь работает.
Опубликовано: 2010-03-10 14:48:39 shadx
Комментарии
| Andrei |
пасибо за внятное обьяснение брат по пхп
|
|
| иван |
да ништяк когда объяснения программистов есть к функциям PHP
|
|
|
Оставить комментарий:
|
|