Главная > Программирование > РНР: настольная книга программиста
<< Предыдущий параграф
Следующий параграф >>
<< Предыдущий параграф Следующий параграф >>
Макеты страниц

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 и выше.

<< Предыдущий параграф Следующий параграф >>
Оглавление