Выходной буфер PHP не работает - PullRequest
0 голосов
/ 04 февраля 2012

Просто в качестве демонстрации попробуйте следующий код:

<code><?php
echo '<pre>';      
ob_end_flush();
for($i=0;$i<2;$i++) {
passthru("ping -n 8 127.0.0.1");
@ob_flush();
}
echo '
'; ?>

Это вывод:

Pinging stackoverflow.com [64.34.119.12] with 32 bytes of data:
Reply from 64.34.119.12: bytes=32 time=28ms TTL=56
Reply from 64.34.119.12: bytes=32 time=29ms TTL=56
Reply from 64.34.119.12: bytes=32 time=29ms TTL=56
Reply from 64.34.119.12: bytes=32 time=28ms TTL=56

Ping statistics for 64.34.119.12:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 28ms, Maximum = 29ms, Average = 28ms

Pinging stackoverflow.com [64.34.119.12] with 32 bytes of data:
Reply from 64.34.119.12: bytes=32 time=28ms TTL=56
Reply from 64.34.119.12: bytes=32 time=27ms TTL=56
Reply from 64.34.119.12: bytes=32 time=26ms TTL=56
Reply from 64.34.119.12: bytes=32 time=29ms TTL=56

Ping statistics for 64.34.119.12:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 26ms, Maximum = 29ms, Average = 27ms

На самом деле он делает это дважды (что из цикла "меньше 2"). Если вы протестируете сценарий, вы заметите, что для создания первого требуется несколько секунд, а затем он выводит все сразу. После этого (второй цикл) он идет построчно. Моя цель состоит в том, чтобы иметь один выход, идти построчно и не буферизовать какие-либо выходные данные, как показано ниже, за исключением случаев, когда это происходит:

<?php
system("ping -n 8 127.0.0.1");
?>

Примечание: это работает на сервере Windows с PHP 5.

1 Ответ

1 голос
/ 04 февраля 2012

Итак, здесь происходит то, что ваш браузер, вероятно, буферизуется.Я думаю, что если вы посмотрите на анализатор пакетов, ваши сбросы, вероятно, сработают.

Просто чтобы быть уверенным, позвоните flush(), а также ob_flush().

Вы никогда не сможете очистить всеиз буферов, так как PHP знает только о своих собственных.Сервер может буферизовать, а клиенты почти всегда буферизируют.

...