28.3. PHP: Возврат значений буфера вывода
Иногда возникает необходимость получить доступ к буферу, произвести какие-либо операции с ним или проверить наличие соответствующих данных. Для решения таких задач были созданы две функции:
• ob_get_contents(),
• ob_get_length().
Чтобы получить доступ кданным буфера, применяется функция ob_get_contents(). Она возвращает строку данных буфера, которые непосредственно выводятся в окно браузера. Ее синтаксис:
string ob_get_contents(void);
Функция возвратит содержимое буфера, если буфер является активным, в противном случае возвратит false. Разберем пример:
<?php
echo "Строка, расположенная выше функции ob_start(); <br>";
ob_start();
echo "Строка, расположенная выше функции ob_get_contents() , но ниже ob_start();<br>";
$content = ob_get_contents();
echo "*** 1. Строка, после которой происходит вывод буфера ***<br>";
echo $content;
echo "*** 1. Вывод данных буфера завершен ***<br>";
echo "Строка, расположенная ниже функции ob_get_contents(), но выше ob_end_flush();<br>";
$content2 = ob_get_contents();
echo "*** 2. Строка, после которой происходит вывод буфера***<br>";
echo $content2;
echo "*** 2. Вывод данных буфера завершен *** <br>";
ob_end_flush();
echo "Строка, которая расположена ниже функции ob_end_flush(); <br>";
$content3 = ob_get_contents();
echo "*** 3. Строка, после которой происходит вывод буфера ***<br>";
echo $content3;
echo "*** 3. Вывод данных буфера завершен *** <br>";
?>
Наличие данных буфера при вызове функции ob_get_contents() прежде всего зависит от того, где располагается эта функции вызова. Она должна находиться между функциями ob_start() и ob_get_flush() и будет возможна работа с данными блока. За пределами, ограниченными этими двумя функциями, доступ к данным буфера при помощи функции ob_get_contents() будет невозможен. Более подробно вы сможете понять, ознакомившись с результатом программы:
Строка, расположенная выше функции ob_start();
Строка, расположенная выше функции ob__get_contents(), но ниже ob_start();
*** 1. Строка, после которой происходит вывод буфера ***
Строка, расположенная выше функции ob_get_contents (), но ниже ob_start();
*** 1. Вывод данных буфера завершен ***
Строка, расположенная ниже функции ob_get_contents(), но выше ob_end_flush();
***2. Строка, после которой происходит вывод буфера ***
Строка, расположенная выше функции ob_get_contents(), но ниже ob_start();
***1. Строка, после которой происходит вывод буфера ***
Строка, расположенная выше функции ob_get_contents(), но ниже ob_start();
***1. Вывод данных буфера завершен ***
Строка, расположенная ниже функции ob_get_contents(), но выше ob_end_flush();
*** 2. Вывод данных буфера ***
Строка, которая расположена ниже функции ob_end_flush();
*** 3. Строка после которой происходит вывод буфера ***
*** 3. Вывод данных буфера завершен ***
Как видно из результата, в первом случае в буфере вывода содержаласьтолько одна строка. После того как мы переместили функцию ob_get_contents(), доступ к данным буфера расширился за счет выполнения большего числа операций, следовательно, и сам буфер расширился (второй случай). В третьем случае мы вообще специально вынесли содержимое буфера за функцию ob_end_flush(), чтобы показать, что в этом месте буфер для функции ob_get_contents() окажется недоступным, т. е. пустым (это последние строчки результата нашего примера).
Если нужно, не обращаясь кданным, получить длину буфера, используйте функцию ob_get_length(). Ее синтаксис:
string ob_get_length (void);
Возвращает длину активного буфера. Если буфер не является активным, функция возвращает false. Рассмотрим пример:
<?php
ob_start();
echo "Строка";
$count = ob_get_length();
echo "Имеющийся буфер имеет следующую длину символов: <br>";
echo $count;
ob_end_flush();
?>
Как считает длину функция ob_get_length() , видно из результата выполнения скрипта:
Строка
Имеющийся буфер имеет следующую длину символов:
6
Мы специально ввели одно слово в наш буфер, чтобы вам было легче посчитать символы в слове «строка» (именно это одно слово содержится в нашем буфере). Как видите, результат показал правильное количество символов. Теперь длина нашего буфера при его использовании будет составлять именно такое количество символов — шесть.
Функции ob_get_contents() и ob_get_length() работают в PHP 4.0.2 и выше.