У меня есть сценарий PHP, который только производит журналы для клиента.
Когда я повторяю что-то, я хочу, чтобы это было передано клиенту на лету.
(Поскольку, в то время как сценарий обрабатывает, страница является пробелом),
Я уже играл вокруг с ob_start()
и ob_flush()
, но они не работали.
Каково лучшее решение?
PS: это немного грязно для помещения сброса в конце echo
звонить...
Править: Ни один Ответы не работал, PHP или Отказ Apache?
Edit:
Я читал комментарии на странице руководства и наткнулся на ошибку, которая гласит, что ob_implicit_flush
не работает и следующее обходное решение для этого:
ob_end_flush();
# CODE THAT NEEDS IMMEDIATE FLUSHING
ob_start();
Возможно, происходит даже то, что клиент не получает пакет от сервера, пока сервер не накопит достаточно символов для отправки того, что он считает пакетом, который стоит отправить.
Старый ответ:
Вы можете использовать ob_implicit_flush
который скажет буферизации вывода отключить буферизацию на некоторое время:
ob_implicit_flush(true);
# CODE THAT NEEDS IMMEDIATE FLUSHING
ob_implicit_flush(false);
Правильная функция - flush ()
.
<html>
<body>
<p>
Hello! I am waiting for the next message...<br />
<?php flush(); sleep(5); ?>
I am the next message!<br />
<?php flush(); sleep(5); ?>
And I am the last message. Good bye.
</p>
</body>
</html>
Обратите внимание, что существует «проблема» с IE, который выводит очищенное содержимое, только если оно составляет не менее 256 байт, поэтому ваша первая часть страницы должна быть не менее 256 байт.
вам нужен метод flush . пример:
echo "log to client";
flush();
Почему бы не сделать функцию для эха, например, такую:
function fecho($string) {
echo $string;
ob_flush();
}