[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: проблемма с flush()
Страницы: 1, 2
deflate
Доброй ночи. Скрипт ниже нормально работает на локалке и не работает на хосте, проверял на трёх разных хостингах.


//ini_set('zlib.output_compression', 'Off');
// @ini_set('output_buffering', 'Off');
// @ini_set('output_handler', '');
//ob_implicit_flush(true);


$i = 0;
$c = $i + 4;
while (++$i < $c) {
echo $i . "\n\n";
ob_flush();
flush();
sleep(2);
}

На локалке он как положено выводит в браузер по одной цифре раз в две секунды. Но это только на локале. То есть буфер не сбрасывается. Есть подозрение, что проблема кроется в gzip/deflate, судя по заголовкам и по слухам gzip сам буферизирует вывод. Попытка отключить через php и htaccess (SetEnv no-gzip dont-vary) не работает. Кто-нибудь сталкивался с такой штукой?
deflate
UP
CoDy
Проверь, может между тобой и апфчем на хостине стоит какой-нибуть nginx или что-то подобное. В таком случае апач сначала отдаст контент nginx, который отошлет его тебе, весь и сразу.
deflate
Цитата

Проверь, может между тобой и апфчем на хостине стоит какой-нибуть nginx или что-то подобное. В таком случае апач сначала отдаст контент nginx, который отошлет его тебе, весь и сразу.


Тестировал в частности на хосте 1gb - у них ngnix не упоминается
CoDy
Не нужно искать какие-то упоминания о наличии у хостера front end-а для основного http-сервера. Это их внутрення кухня и они врятли об этом будут упоминать.

Просто посмотри заголовки ответа, па предмет отдающего ПО(заголовок Server).
Вот пример ответа от сайта, который за fron end nginx "прячется": http://clip2net.com/s/iAzetL
deflate
нет не ngnix

HTTP/1.1 200 OK
Date: Thu, 24 Jul 2014 11:07:03 GMT
Server: Apache/2.2.16 (Debian)
X-Powered-By: PHP/5.3.26-1~dotdeb.0
Set-Cookie: PHPSESSID=glp689h9vqlajebta8oeuodqc6; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
Content-Type: text/html
sergeiss
В хэлпе http://ru2.php.net/manual/ru/function.flush.php, по-моему, четко всё описано: может быть выведет сразу же, а может и не выведет. Эта функция является, по сути, пожеланием программиста: "отдай всё клиенту, что есть в выходном буфере". Пожеланием, но не командой, требующей немедленного исполнения.

Изначально какая задача у тебя? Просто проверить, как работают буферы вывода или еще что-то?

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
deflate
Цитата

В хэлпе http://ru2.php.net/manual/ru/function.flush.php, по-моему, четко всё описано: может быть выведет сразу же, а может и не выведет. Эта функция является, по сути, пожеланием программиста: "отдай всё клиенту, что есть в выходном буфере". Пожеланием, но не командой, требующей немедленного исполнения.

Изначально какая задача у тебя? Просто проверить, как работают буферы вывода или еще что-то?


задача простая. js открывает постоянное соединение, php асинхронно отдаёт данные в поток. Но так как буфер не сбрасывается, отдаёт пачками. Оно может было бы и без разницы, но визуализация прогресса на клиенте убогая получается. А в моём случае, визуализация важный параметр. Ещё раз повторюсь, на локалке работает как часы.
Valick
deflate, что меншает порционно запрашивать информацию с сервера?


_____________
Стимулятор ~yoomoney - 41001303250491
sergeiss
Цитата (deflate @ 24.07.2014 - 18:38)
задача простая. js открывает постоянное соединение, php асинхронно отдаёт данные в поток. Но так как буфер не сбрасывается, отдаёт пачками.

Либо порциями сбрасывать, как Валик предлагает (для каждой порции отдельный запрос), либо использовать WinSocket, тогда нигде не будет проблем с буферами.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
deflate
Цитата

deflate, что меншает порционно запрашивать информацию с сервера?

каждый такой запрос, это инициализация приложения с кучей тяжёлых запросов к базе и т.д. А при открытом потоке, инициализация происходит только один раз
sergeiss
Цитата (deflate @ 24.07.2014 - 19:51)
А при открытом потоке, инициализация происходит только один раз

Цитата (sergeiss @ 24.07.2014 - 19:45)
использовать WinSocket



_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Valick
Цитата
это инициализация приложения с кучей тяжёлых запросов к базе и т.д

вы про кеш вообще слышали?

_____________
Стимулятор ~yoomoney - 41001303250491
sergeiss
Valick, у меня есть подозрение, что кэш ему тут не поможет. А вот сокеты как раз помогут.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Valick
sergeiss, да я не против сокетов, есть еще и комет, но брать порцию из кеша, этож проще не придумаешь.

_____________
Стимулятор ~yoomoney - 41001303250491
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.