- → Программирование
- → 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 раз в сутки, выбирался случайным образом из массы всех статей. Он выглядел таким образом:
Но здесь была проблемка, одна статья была на 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 буферизации.
Сжатие 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, нет предела. Наверняка у вас уже появились свои идеи, как реализовать те или иные штучки на своем сайте. Спасибо за внимание, надеюсь моя статья была вам полезной. Кстати, если имеете еще идеи по поводу применения php буферизации, пишите в комментариях ниже.
Дальше: Отправка формы с помощью Ctrl + Enter на javascript



Development — Taras Moroz