Все мы знаем, что PHP - это серверный язык. И у него есть особенность вывода информации, например, с помощью echo . Эта особенность заключается в том, что функции вывода (в том числе и операторы) отправляют информацию не сразу на вывод, а сначала в выходной поток. Этот выходной поток можно представить как трубу (или...
Все мы знаем, что PHP - это серверный язык. И у него есть особенность вывода информации, например, с помощью echo. Эта особенность заключается в том, что функции вывода (в том числе и операторы) отправляют информацию не сразу на вывод, а сначала в выходной поток. Этот выходной поток можно представить как трубу (или буфер), в которой накапливается выходная информация. Все echo, print и прочие выходные функции и операторы отправляют данные в эту самую трубу. И только после окончания работы скрипта всё содержимое этой трубы перемещается в браузер. Однако, иногда необходимо динамически выводить данные в PHP-скрипте, то есть видеть определённый результат прямо в процессе работы.
Давайте для начала разберём такой пример:
<?php
for ($i = 0; $i < 5; $i++) {
echo $i;
sleep(1);
}
?>
Если запустить данные скрипт, то примерно в течение 5-ти секунд ничего происходить не будет, а затем мгновенно появятся все 5 цифр. Это как раз наглядное доказательство существования выходного потока. Сначала в выходной поток помещаются все данные через echo, а после выполнения скрипта, содержимое выходного потока мгновенно выбрасывается в браузер.
Теперь давайте всё-таки разберём, как динамически выводить данные в PHP-скрипте. Делается это с помощью специальной функции flush(), которая позволяет высвободить выходной поток ещё до завершения скрипта. Перепишем предыдущий пример:
<?php
for ($i = 0; $i < 5; $i++) {
echo $i;
flush();
sleep(1);
}
?>
В результате каждую секунду Вы будете видеть появление одной цифры.
Где можно использовать функцию flush()? В основном, это очень долгие скрипты. Допустим, Вы сделали какой-нибудь парсер сайта. Если сайт большой, то парсер будет работать очень долго, и чтобы видеть, что он элементарно не зациклился и вообще ешё работает, можно выводить адрес последней считанной страницы. Это всего лишь как пример, и таких примеров у функции flush() великое множество.
