gzip без mod_gzip и mod_deflate и предварительно загруженных файлов

#php #.htaccess #gzip

#php #.htaccess #gzip

Вопрос:

Моя хостинговая компания не поддерживает mod_gzip и mod_deflate.

Я должен загрузить файлы gzip .js и css

Я предварительно сжал файлы.

Я использую Joomla, и для добавления скриптов в документ я должен использовать PHP-файл, который обслуживает .js.gz файлы, когда пользователь принимает кодировку (пример кода PHP joomla):

 $document = amp;JFactory::getDocument();

    $document->addScript($jQueryPath);
  

Я добавил приведенную ниже директиву в .htaccess; однако браузеры не распаковывают .js.gz файлы

 # Add some gzip to the bunch
AddEncoding x-gzip .gz 
<FilesMatch .js.gz$>
        ForceType text/javascript
        Header set Content-Encoding "gzip"
</FilesMatch>
<FilesMatch .css.gz$>
        ForceType text/css
        Header set Content-Encoding "gzip"
</FilesMatch>

RewriteCond %{REQUEST_FILENAME} ^. .(js|css)$ [NC]
RewriteCond %{HTTP:Accept-Encoding} gzip
RewriteCond %{REQUEST_FILENAME}.gz -f
RewriteRule ^(. )$ $1.gz [L,QSA,NC,NS]
  

Кто-нибудь может помочь с gzip в описанных условиях?

Спасибо,

Комментарии:

1. Лично я бы сократил всю ситуацию и нашел более компетентную хостинговую компанию.

2. Помимо хостинговой компании, может иметь смысл иметь предварительно рассчитанное сжатие, поскольку часто файлы не меняются, и серверу не нужно выполнять ту же работу заново. Своего рода кэширование.

Ответ №1:

Большинство установок php поставляются с расширением Zlib, которое позволяет вам манипулировать файлами gzip.

Взгляните на эти страницы руководства по php, чтобы выполнить то, что вы просили:

http://www.php.net/manual/en/function.gzcompress.php
http://www.php.net/manual/en/function.gzdeflate.php
http://www.php.net/manual/en/function.gzencode.php

вы можете использовать суперглобальный файл $_SERVER для проверки заголовка Accept Encoding:

 if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'deflate'))
{
// DO STUFF HERE
}
elseif (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip'))
{
// DO STUFF HERE
}