PHP: Буферизация вывода - Сжатие выходных данных
Индекс материала |
---|
PHP: Буферизация вывода |
Повторное использование буферов |
Чтение буферов вывода |
Сжатие выходных данных |
Все страницы |
Сжатие выходных данных
Для того чтобы сжать буфер вывода нужно передать функции ob_start() параметр - имя функции - компрессора, например ob_gzhandler.При этом будет выполнена проверка поддержки сжатия и если такая поддержка есть, то данные будут сжиматься:
// Здесь мы включили сжатие буфера: ob_start('ob_gzhandler'); echo 'Contrary ... section'; ob_end_flush();
Результат обведён красным:
А вот результат без сжатия вывода:
Сжатие работает только применительно к HTML - коду, к картинкам и прочему это не относится. Учитывайте это. А ещё PHP позволяет сжимать только один буфер вывода, так как содержимое должно сжиматься всё и сразу. Имейте это ввиду, если вы используете стек буферов вывода.
Переписывание URL
Скажу сразу что к ЧПУ ссылкам и к mod_rewrite данные возможности не имеют никакого отношения, но тем не менее позволяют вытворятьинтересные штуки.
Эта функция принимает два параметра, первый это имя переменной, а второй это значение этой переменной. Эта пара ключ-значение добавиться ко всем 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 и с чем её едят.
Самостоятельное строительство дома из бруса
Самостоятельное строительство дома из бруса
masterbrusa.ru
Добавить комментарий
Информация копипастерам
Внимание! Копирование контента с сайта, возможно только с разрешения администратора. Т.е. Меня! Я скорее всего разрешу Вам это сделать, в обмен на живую ссылку, на статью оригинал.