Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHP Kompresja CSS/JS w htaccess
Forum PHP.pl > Forum > PHP
dotangelo
W sumie nie wiedziałem gdzie ten temat napisać gdyż pasuję on do wielu tematów, stwierdziłem że najbardziej dotyczy PHP więc piszę właśnie tutaj.

Wiem, że tematów o kompresji było sporo, jednak nie w tym rzecz. Jak kompresję przeprowadzić wiem, sęk w tym, że z CGI to po prostu nie działa.

Od 2 dni próbuję zrobić kompresję plików css/javascript na podstawie .htaccess, czyli prostego DEFLATE.
Gdyby PHP było skompilowane jako moduł apache, wszystko było by ok, ale jest jako cgi-bin i przypuszczam że dlatego muszę poszukać innego rozwiązania.

O tyle, o ile funkcje jak ob_start('ob_gzhandler') działają, o tyme gzcompress() już nie, tak samo reguły w .htaccess (próbowałem około 23 różnych reguł do kompresji [!]). Za każdym razem dostaję ISE (kod 500).

Myślę, że jest coś ważnego o czym nie wiem, jeśli chodzi o kompresję oraz CGI. Mam nadzieję, że ktoś tutaj wie o co chodzi i podzieli się ze mną tą wiedzą smile.gif

tutaj znalazłem coś takiego:
Cytat
# uncomment this line to enable site wide gzip to greatly decrease load times
# may cause 500 server errors on servers running php in cgi mode
#---------------------------------------- GZIP BEGIN ------------------------------------#
# php_value output_handler ob_gzhandler
#---------------------------------------- GZIP END --------------------------------------#


IF THE SERVER IS RUNNING PHP AS CGI
THAT LINE MUST REMAIN COMMENTED OUT

as php cgi will nor run gzip

i also might add that this server is running Suhosin-Patch
and if that was installed wrong and or setup wrong
that also could be part of your problem.


Czyli CGI nie odpali Gzip, dlaczego, i jak to obejść ?
erix
Cytat
Czyli CGI nie odpali Gzip, dlaczego, i jak to obejść ?
  1. nie odpali
  2. bo Apache nie rozumie wtedy php_value z htaccess (przy ISAPI dodawana jest nowa dyrektywa)
  3. gzcompress" title="Zobacz w manualu PHP" target="_manual nie działa? Jeśli nie - chyba czeka Cię rekompilacja PHP, jeśli działa - możesz spróbować w php.ini włączyć kompresję. A co do pozostałych plików - chyba było do Apache coś takiego, jak mod_gzip
dotangelo
Rozumiem, dziękuję bardzo, to rozjaśnia parę rzeczy.
PHP nie mogę za bardzo przekompilować gdyż jest to zewnętrzny hosting, a kontakt z adminem się urwał - będę musiał zmienić hosting, ale dopiero jak mi wygaśnie.
Skoro działa ob_start('ob_gzhandler'), to mogę załączać pliki z użyciem tej funkcji, po prostu napisałbym odpowiedni plik PHP. Jednak są dwie kwestie:
-czy za każdym razem kompresować taki plik, czy po prostu zapisać jego "zGZIPowaną" wersję, aby nie obciążać interpretera?
-o tyle, o ile działa dla domeny głównej, to dla subdomeny za pieruna nie mogę odpalić tego kodu (ani tego, ani ŻADNEGO kodu PHP). Czy aby odpalić PHP dla subdomeny (http://static.mojastrona.pl/test.php) trzeba mieć jakaś dodatkową konfigurację ? (dodam tylko, że mimo iż subdomena nazywa się static, to nie wykonywałem na niej żadnych dodatkowych czynności jak zmienianie nagłówków czy wyłączanie funkcji).
erix
Cytat
-czy za każdym razem kompresować taki plik, czy po prostu zapisać jego "zGZIPowaną" wersję, aby nie obciążać interpretera?

No, dobrze myślisz - oczywiście to drugie. Gdzieś była klasa gotowa do tego, chyba na blogu twórców YUI.

Cytat
-o tyle, o ile działa dla domeny głównej, to dla subdomeny za pieruna nie mogę odpalić tego kodu (ani tego, ani ŻADNEGO kodu PHP). Czy aby odpalić PHP dla subdomeny (http://static.mojastrona.pl/test.php) trzeba mieć jakaś dodatkową konfigurację ? (dodam tylko, że mimo iż subdomena nazywa się static, to nie wykonywałem na niej żadnych dodatkowych czynności jak zmienianie nagłówków czy wyłączanie funkcji).

Powiem tak - to już działka admina.
dotangelo
Widzisz, z adminami jest tak:
Cytat
(22:29:44) niestety nie znam sie na tego typu rzeczach
(22:29:50) do czego to Panu potrzebne
(22:37:33) prosze napisac
(22:37:37) po angliesku
(22:37:38) wiadomośc
(22:37:40) ja mu przekaże
(22:37:46) przekaże do supportu

Dlatego będę musiał opracować hack na hacku smile.gif

OK, mam rozwiązanie.

- Pobieramy gzip.exe
- odpalamy w linii komend:
Kod
gzip.exe -9 style.css

- otrzymujemy plik style.css.gz, który wysyłamy na serwer
- otwieramy .haccess:
- wprowadzamy:
Kod
AddEncoding gzip .gz
<Files *.css.gz>
  ForceType text/css
</Files>

<Files *.js.gz>
  ForceType text/javascript
</Files>

Nie wiem czy będzie to działało z subdomenami, sprawdzę jutro <= działa z subdomenami.

W kodzie HTML dajemy tylko:
  1. <link rel="stylesheet" href="screen.css.gz" type="text/css" media="screen" charset="utf-8"/>


Zalety takiego rozwiązania:
- kod nie musi byc kompresowany za każdym razem gdy użytkownik wyśle request (z tego co się orientuję przeglądarka zajmuje się takim kodem, więc nie obciąża serwera)
- kod oczywiście zajmuje mniej miejsca (nawet 85% mniej!)

Oczywistą wadą jest oczywiście to, że po każdej zmianie pliku css należy powtórzyć kompresję oraz wysłać nowy plik ".gz" na serwer.
Rozwiązanie znalazłem tutaj
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.