как использовать gzip для файла css/js в PHP?

Теперь я не использую какой-либо метод сжатия, просто поместите следующее между тегом body:

<link rel="stylesheet" type="text/css" href="Client/Css/all.css" />

Можно ли использовать ob_start("ob_gzhandler") в PHP для сжатия этого файла css?

И как?


person omg    schedule 05.06.2009    source источник


Ответы (5)


это обычно не делается программно, это обрабатывается веб-сервером

Для apache существует mod_gzip или mod_deflate, который вы можете использовать.

У IIS есть настройки, которые вы можете использовать.

person Joel Martinez    schedule 05.06.2009
comment
Если он не использует более старую версию, он захочет использовать mod_deflate, а не mod_gzip. - person jacobangel; 05.06.2009
comment
Я не понимаю: gzip используется чаще, чем deflate, почему Mod_Gzip старше, чем mod_deflate? - person omg; 05.06.2009

Да, вы могли бы (при передаче файлов через php-скрипт, который выполняет сжатие). Но это гораздо больше, чем простое сжатие вывода. Вы должны отправлять сжатый вывод только тем клиентам, которые его поддерживают, вы должны убедиться, что вы правильно обрабатываете кэшированную информацию/запросы. И т.п.

В некоторых случаях ваш веб-сервер содержит поддержку, позволяющую делать все это за вас без необходимости использования PHP-скрипта. В случае Apache посмотрите на mod_deflate и mod_mime (директива AddEncoding).

person elmuerte    schedule 05.06.2009

Есть несколько способов.

Вы можете указать веб-серверу обрабатывать файл как PHP (переименование с расширением .php было бы самым простым), а затем добавить:

<?php
  header("Content-type: text/css; charset=utf-8");
  ob_start("ob_gzhandler")
?>

наверх.

Вы можете написать PHP-скрипт, который делает то же самое, но читает файл CSS, а не встроенный.

Оба этих варианта приводят к проблемам с кешированием — вам также придется позаботиться о HTTP-заголовках управления кешем, если вы хотите быть в здравом уме.

Лучшим вариантом было бы забыть о PHP и просто настроить веб-сервер для сжатия этих файлов (используя mod_deflate, mod_gzip или подобные)

person Quentin    schedule 05.06.2009
comment
Не забудьте декларацию кодировки символов. - person Gumbo; 05.06.2009
comment
Это довольно неуместно - только в очень-очень редких крайних случаях не используется простой ASCII, который является подмножеством любой кодировки символов, которая может использоваться. - person Quentin; 05.06.2009

Если вы используете более новую версию веб-сервера Apache, добавьте в файл .htaccess следующее:


DeflateCompressionLevel 9  
SetOutputFilter DEFLATE  
BrowserMatch ^Mozilla/4 gzip-only-text/html  
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html  
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png|ico)$ no-gzip dont-vary  
Header append Vary User-Agent env=!dont-vary

person Rick Lavigne    schedule 05.06.2009

Что вы пытаетесь достичь? Если вы пытаетесь сжать компоненты для отправки в браузер клиентов, чтобы они загружались быстрее, вам следует использовать mod_defalte. Если это не вариант, вы можете найти больше здесь: первый результат поиска в гугле "gzip php css"

РЕДАКТИРОВАТЬ: я просто хочу указать, что если вы не используете более старую версию Apache, вам следует использовать mod_deflate не mod_gzip.

person jacobangel    schedule 05.06.2009