PHP - отправка сжатого gzip JS / CSS - PullRequest
7 голосов
/ 16 ноября 2010

Я создал файл style.css.php с этим кодом:

<?php

  $gzip = (ob_get_length() === false && !ini_get("zlib.output_compression") && ini_get("output_handler") != "ob_gzhandler" && extension_loaded("zlib") && substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') && !headers_sent());

  if(!$gzip) header('Location: style.css');

  header('Content-type: text/css');
  header('Cache-Control: no-cache');
  header('Expires: Mon, 1 Jan 1901 04:20:00 GMT');

  ob_start('ob_gzhandler');

  include "style.css";
?>

Что вы думаете?Это хороший способ для сжатия файлов js / css?Есть лучший способ сделать это?Я делаю это для публичного приложения.это может быть загружен любым.Так что на общих хостах будут люди с отключенным gzip

Ответы [ 5 ]

10 голосов
/ 16 ноября 2010

Нет, не в порядке. Там много чего не так. Включать, не умирать после перенаправления, не учитывая метод deflate, ...

Это очень просто сделать с PHP, так как обработчик вывода zlib автоматически определяет подходящее сжатие для отправки клиенту (если есть); все, что вам нужно сделать, это включить его:

<?php
if (extension_loaded("zlib") && (ini_get("output_handler") != "ob_gzhandler")) {
    ini_set("zlib.output_compression", 1);
}

readfile('style.css');
3 голосов
/ 16 ноября 2010

Если вы обслуживаете свой сайт с помощью Apache, вы можете использовать либо mod_gzip, либо mod_deflate.Они обычно доступны на общих хостах и ​​могут быть настроены в файлах .htaccess.

Добавьте следующие строки в ваш файл .htaccess:

AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript

(т.е. по одной на mime-тип)

2 голосов
/ 16 ноября 2010

Адам находится на правильном пути, но ему не обязательно должен быть один тип MIME на строку. Для получения дополнительной информации о директиве AddOutputFilterByType .

см. Руководство Apache2.
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript text/javascript-x application/javascript
2 голосов
/ 16 ноября 2010

Сервер должен делать это автоматически, если настроен правильно.

0 голосов
/ 10 декабря 2014

Первый SET в '.htaccess'

RewriteEngine on
RewriteRule style.css style.css.php
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
SetOutputFilter DEFLATE

BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch MSI[E] !no-gzip !gzip-only-text/html

SetEnvIfNoCase Request_URI 
.(?:gif|jpe?g|png)$ no-gzip dont-vary
</IfModule>

Рекомендуется создать папку css и поместить туда файлы.

С RewriteRule вам не нужноset header('Content-type: text/css'); и другие функции, устанавливающие gzip на сервере перед процессом php.код работает быстрее!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...