2014-03-22 2 views
0

Я хочу использовать flush() функции for loop, что эхо-контента после каждого цикла
моего кода:Почему flush() не работает в цикле? (PHP)

<?php 
if (ob_get_level() == 0) ob_start(); 
for ($i = 0; $i<10; $i++){ 
     echo "<br> Line".$i." to show."; 
     ob_flush(); 
     flush(); 
     sleep(2); 
} 

echo "<br>Done."; 

ob_end_flush(); 
?> 

этого код работает на локальном и другой хост (Demo), но не работает на моем основном хозяйничать (Demo + phpinfo page)

, как я могу решить эту проблему? Я использую хром

ответ

1

Существует «varnish« прокси перед вашим вторым сервером. Это нарушает время вашего скрипта. Обычно вы не должны полагаться на время, когда возвращаете свой ответ, именно потому, что на этом может быть проксисервер. Вместо этого вы можете использовать какой-то polling или WebSockets.

$ nc shoma.info 80 
GET /test/1.php HTTP/1.1 
Host: shoma.info 
Connection: close 

HTTP/1.1 200 OK 
Server: Apache 
X-Powered-By: PHP/5.3.28 
Vary: Accept-Encoding 
Content-Type: text/html 
Content-Length: 209 
Accept-Ranges: bytes 
Date: Sat, 22 Mar 2014 19:18:40 GMT 
X-Varnish: 972965439 
Age: 0 
Via: 1.1 varnish <------- this is the problem 
Connection: close 

<br> Line 0 to show.<br> Line 1 to show.<br> Line 2 to show.<br> Line 3 to show.<br> Line 4 to show.<br> Line 5 to show.<br> Line 6 to show.<br> Line 7 to show.<br> Line 8 to show.<br> Line 9 to show.<br>Done. 

BTW: Мой firefox здесь даже не показывает «анимацию» вашего первого сервера. Поэтому вы даже не можете полагаться на браузер, отображающий его.

+0

Спасибо @escitalopram, как я могу отключить его? – user3172633

+0

Вы не можете отключить его в скрипте PHP. Это конфигурация сервера или даже проблема сетевой архитектуры. Скорее всего, лучше использовать AJAX или WebSockets вместо того, чтобы пытаться это исправить. – escitalopram

+0

Я добавляю 'Header add 'disablevcache" "true" 'в' .htaccess', но не работает. Я попробую ваше предложение – user3172633

0

Попробуйте установить это на самого начало:

ini_set('implicit_flush', true); 

Source here

+0

Я тестирую его не работает – user3172633

1

Проблема в конфигурации PHP.

output_buffering - это параметр в вашем файле конфигурации PHP php.ini. Он обеспечивает буферизацию вывода для данных.

В вашей конфигурации PHP он имеет «no value». Итак, просто установите output_buffering параметр 'On'. Или если вы хотите установить некоторый предел для буферизации данных, установите количество байтов (например, «4096») в этой директиве.

+0

why »On«? Не следует ли буферизировать _delay_ отправку ответа? – escitalopram

+0

Я тестирую его не работает – user3172633

+0

Вы перезапустили веб-сервер? –

Смежные вопросы