PHP: Буферизация вывода - Сжатие выходных данных

PHP: Буферизация вывода - Сжатие выходных данных

Индекс материала
PHP: Буферизация вывода
Повторное использование буферов
Чтение буферов вывода
Сжатие выходных данных
Все страницы

Сжатие выходных данных

Для того чтобы сжать буфер вывода нужно передать функции ob_start() параметр - имя функции - компрессора, например ob_gzhandler.При этом будет выполнена проверка поддержки сжатия и если такая поддержка есть, то данные будут сжиматься:

// Здесь мы включили сжатие буфера:
ob_start('ob_gzhandler');
echo 'Contrary ... section';
ob_end_flush();

Результат обведён красным:

Сжатие буфера вывода

А вот результат без сжатия вывода:

Без сжатия вывода

Сжатие работает только применительно к HTML - коду, к картинкам и прочему это не относится. Учитывайте это. А ещё PHP позволяет сжимать только один буфер вывода, так как содержимое должно сжиматься всё и сразу. Имейте это ввиду, если вы используете стек буферов вывода.

Переписывание URL

Скажу сразу что к ЧПУ ссылкам и к mod_rewrite данные возможности не имеют никакого отношения, но тем не менее позволяют вытворятьинтересные штуки.

output_add_rewrite_var( 'name', 'value' )

Эта функция принимает два параметра, первый это имя переменной, а второй это значение этой переменной. Эта пара ключ-значение добавиться ко всем URL, формам и атрибутам SRC - элементов FRAME, в виде GET - переменных строки запроса. К формам добавятся скрытые поля с соответствующими значениями. В общем проще показать на примере:

ob_start();
output_add_rewrite_var('somevar', 'someval');

echo '<form action="anywere.html" method="get">
        <input name="..." value="..." />
      </form>';

echo '<a href="anywere.html">LINK</a>';

ob_end_flush();

Выдаст такой HTML - код:

<form action="anywere.html" method="get">
  <input type="hidden" name="somevar" value="someval" />
  <input name="..." value="..." />
</form>

<a href="anywere.html?somevar=someval">LINK</a>

Заметьте атрибуты action тега form - остались не тронуты! Пример с тегами FRAME:

ob_start();
output_add_rewrite_var('somevar', 'someval');

echo '<frameset cols="80,*">
        <frame src="left.html" name="leftFrame" scrolling="no" noresize>
        <frame src="main.html" name="mainFrame">
     </frameset>';

ob_end_flush();

Выдаст такой HTML - код:

<frameset cols="80,*">
  <frame src="left.html?somevar=someval" name="leftFrame" scrolling="no" noresize>
  <frame src="main.html?somevar=someval" name="mainFrame">
</frameset>

Функцию output_add_rewrite_var() можно вызывать несколько раз с разными параметрами, в этом случае пары будут добавляться согласно формату кодирования данных: "application/x-www-form-urlencoded" разделяясь знаками амперсанда а в формы будут добавляться новые скрытые поля. Вот так будет выглядеть пример:

ob_start();

output_add_rewrite_var('somevar', 'someval');
output_add_rewrite_var('somevar1', 'someval1');
output_add_rewrite_var('somevar2', 'someval2');

echo '<form action="anywere.html" method="get">
        <input name="..." value="..." />
			</form>';

echo '<a href="anywere.html">LINK</a>';

ob_end_flush();

Выдаст такой HTML - код:

<form action="anywere.html" method="get">
  <input type="hidden" name="somevar" value="someval" />
  <input type="hidden" name="somevar1" value="someval1" />
  <input type="hidden" name="somevar2" value="someval2" />
  <input name="..." value="..." />
</form>
<a href="anywere.html?somevar=someval&somevar1=someval1&somevar2=someval2">LINK</a>

А вот если в конце примера вызвать функцию output_reset_rewrite_vars() - то она отменит все изменения произведённые вызовами функций output_add_rewrite_var(...) т.е. все ссылки вернуться к исходному состоянию.

Ну, вот надеюсь я доступно объяснил что такое буферизация вывода в PHP и с чем её едят.



Добавить комментарий


Защитный код
Обновить



Кто на сайте
Сейчас 80 гостей онлайн