Главная » Полезные статьи » Язык PHP » PHP буферизация: буферизация вывода в PHP
Распечатать статью

PHP буферизация: буферизация вывода в PHP

Зачем нужна буферизация вывода в PHP? Что это такое? Как ее реализовать? Ответы на эти вопросы вы найдете в нашей статье. Сейчас мы детально рассмотрим практическое применение php буферизации и посмотрим реальные примеры. Как и во всяком деле поставим для себя цели и будем их достигать понемногу:

PHP буферизация

Слово буферизация говорит само за себя, это значит, что мы что-то копируем, помещаем в буфер. В php, буферизация позволяет скопировать определенную часть выводимого контента (html) в браузер, обработать ее нужными нам функциями и показать его пользователю. Зачем это нам? Например, можно реализовать сжатие html кода, или замены некоторых сущностей на другие, да что угодно. Более детально рассмотрим применение php буферизации в последнем пункте статьи.

Реализация буферизации вывода в PHP

Буферизация начинается с функции ob_start([callback]);. После ее объявления буферизироваться будет все, что выводится в окно браузера. Аргумент callback это пользовательская функция, через которую можно пропустить и обработать выводимый текст, она должна возвращать одну строку.

ob_end_clean(); — завершает буферизацию и чистит буфер, но в браузер ничего не посылается.

Существует много функций для работы с буферизацией вывода в php. Сейчас посмотрим маленький практический пример для большей ясности дела. Например, у Вас генерируется страница, но при этом необходимо в тексте страницы заменить все буквы «ё» на буквы «е. Тогда делается примерно такое:

ob_start();

генерируется страница;

$page = ob_get_contents();

ob_end_clean();

$page = str_replace(«ё», «е», $page);

echo $page;

Применение буферизации вывода

Рассмотрим некоторые практические стороны применения буферизации вывода. Как уже упоминалось, предположительно мы имеем часть выводимого html кода или весь выводимый код. Что же с ним можно сделать?

Реализация автообновления на вашем сайте.

Обновление в смысле обновление контента. Посмотрев лекции Каширина, я узнал, что для того, что-бы страничка сайта была обновляемой в глазах поискового робота, необходимо, что-бы 25% содержимого страницы поменялось коренным образом. В начале, я просто создавал блок анонса, который выводил 25% символов от статьи, блок был одним и тем же на всех страницах, обновлялся 1 раз в сутки, выбирался случайным образом из массы всех статей. Он выглядел таким образом:

php буферизация

Но здесь была проблемка, одна статья была на 1500 символов, другая на 10000 символов, и если анонсом выбиралась та, что на 10000 символов, и анонс отображался на той статье в которой 1500 символов, то получалось что блок анонса составлял 5000 символов, это гораздо больше, нежели сама статья. Может, вы думаете, что нужно было, узнать количество символов исходной статьи и вывести в 4 раза меньше в анонсе. Я тоже так думал, но есть еще много факторов, таких как комментарии, новости сайта… В общем, нужно было знать количество символов всей странички, в этом мне помогла php буферизация или php буферизация вывода, называйте как хотите. Ниже код как я это реализовал.

<?
 ob_start(‘len’); // на самом верху кода выводимой странички
?>
  // Текст странички после <body> … в общем вся страница до того места где нужно вставить блок анонса
<?
function len($buffer)
{
include(‘anons.php’);
return $buffer.$show_anons;
}
ob_end_flush(); ?>

В файле anons.php, узнаем количество символов контента страницы без html тегов используя функции strip_tags() и strlen(). Далее дело техники, вычисляем блок анонса, его html код пишем в $show_anons и прицепляем после буферизированного контента ($buffer). Вот так вот мне помогла буферизация вывода в php. Ниже, скриншоты блока анонса, написанного с помощью использования php буферизации.

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

Вполне приличные блоки анонсов. Автообновление странички организовано, кричу УРА php буферизации.

Сжатие html кода

Об этом у меня есть отдельно написанная статья: сжатие html кода, но я предоставлю пример php кода, в нем тоже используется PHP буферизация.

<?php
                //  старт буферизации выводимого
                ob_start(‘compress_html’);
?>
<!—Здесь находиться html код  —>
<?php
                // конец буферизации и вывод сжатого html кода
                ob_end_flush();
                //  Эта функция избавляется от переносов, пробелов и т.д.
                function compress_html($compress)
                {
                               $i = array(‘/>[^S ]+/s’,‘/[^S ]+</s’,‘/(s)+/s’);
                               $ii = array(‘>’,‘<’,’1′);
                               return preg_replace($i$ii$compress);
                }
?>

Другие варианты

Как видите применению буферизации вывода в php, нет предела. Наверняка у вас уже появились свои идеи, как реализовать те или иные штучки на своем сайте.

Источник:  sitear.ru

Вы можете оставить комментарий, или обратную ссылку на Ваш сайт.

Оставить комментарий

Похожие статьи