PHP-сброс и WAMP-сервер - PullRequest
       29

PHP-сброс и WAMP-сервер

3 голосов
/ 31 января 2012

Я не могу на всю жизнь заставить работать функцию сброса PHP, используя WAMP.Вот пример кода, закомментированы все разные вещи, которые я пробовал:

//apache_setenv('no-gzip', 1); // returns error that apache_setenv does not exist
//ini_set('zlib.output_compression',0);
//ini_set('implicit_flush',1);
//ob_end_clean();
//for ($i = 0; $i < ob_get_level(); $i++) { ob_end_flush(); }
//ob_implicit_flush(1);
set_time_limit(0);
echo "<pre>";
for ($i = 0; $i < 100; ++$i) {
    echo $i.' '.time().str_repeat(' ',256)."\n";
    //ob_flush(); // returns error without output buffering enabled
    flush();
    usleep(100000);
}

Кажется, что независимо от того, что я делаю, я всегда получаю результаты все вместе в одном гигантском куске.

Edit: я загрузил тот же самый точный код на сервер, работающий на cPanel / linux, и он отлично работает во всех браузерах.Почему я не могу заставить его работать должным образом на локальном сервере WAMP ??

Ответы [ 2 ]

3 голосов
/ 31 января 2012

flush (), возможно, не сможет переопределить схему буферизации вашего веб-сервера, и это не повлияет на буферизацию на стороне клиента в браузере. Это также не влияет на механизм буферизации вывода пользовательского пространства PHP. Это означает, что вам придется вызывать оба метода ob_flush () и flush () для очистки выходных буферов ob, если вы их используете.

Несколько серверов, особенно на Win32, по-прежнему будут буферизовать вывод из вашего скрипта, пока он не завершится, прежде чем передать результаты в браузер.

Серверные модули для Apache, такие как mod_gzip, могут выполнять собственную буферизацию, что приведет к тому, что flush () не приведет к немедленной отправке данных клиенту.

Даже браузер может буферизовать свои данные перед отображением Например, Netscape буферизует текст до тех пор, пока не получит конец строки или начало тега, и не будет отображать таблицы, пока не будет виден тег самой внешней таблицы.

Некоторые версии Microsoft Internet Explorer начинают отображать страницу только после того, как они получили 256 байтов вывода, поэтому может потребоваться отправить дополнительный пробел перед сбросом, чтобы эти браузеры отображали страницу.

  • php.net
0 голосов
/ 31 января 2012

Попробуйте использовать ob_flush () перед flush ();

...