Отправить заявку

Буферизация вывода на PHP

Часто бывают случаи, когда в некотором месте программы необходимо отправить заголовки, например, для перезагрузки страницы, а контент на вывод уже отправлен или контент, который выводится раньше определенной информации, необходимо вывести после этой информации. В этом случае нужно переписывать программу, возможно, менять алгоритм, что бы добиться того, что нужно. Но можно поступить проще, для этого в PHP (скажем прямо не только для этого) и придумали замечательный набор функций начинающихся c префикса ob_, такие как ob_start(), ob_get_contents(), ob_end_clean() и другие.

Рассмотрим на примере буферизацию вывода на PHP:

<?
echo 'test';
header('location:http://artkiev.com'); //отправленный заголовок уже не сработает , т.к. на вывод уже отправлено слово "test"
exit();
?>

Что бы функция отправляющая заголовки сработала, необходимо запустить буферизацию вывода. Это значит, что выводимая на экран информация будет складываться в буфер, а не отправляться сразу на экран.

<?php
ob_start();
echo 'test';
header('location:http://artkiev.com'); //теперь отправленный заголовок сработает
exit();
?>

На следующем примере видно, как вывести контент, который выводится раньше опреленной информации, после этой информации.

<?php
ob_start();
echo 'первый выводимый контент';
$out=ob_get_contents(); //в переменную $out складывает первый выводимый контент
ob_end_clean(); // прекращаем буферизацию и очищаем буфер
echo 'второй выводимый контент';
echo $out; //выводим первый выводимый контент
?>

В результате первый контент будет выведен после второго, хотя и отправлялся он на вывод он раньше первого.

Другие публикации