[php]Kompresja gzip i on/off

0

Witam mam kompresje danych za pomoca gzip

<?php
ini_set('zlib.output_compression', true);
ini_set('zlib.output_compression_level', 1);
ob_start('ob_gzhandler');
include('config1.php');
?>

JEdnak jest jeden problem w pliku config1.php jest zmienna $gzip o wartosci 2 czyli kompresja ma byc wlaczona jednak nie wiem jak zrobic warunek ze gdy jest rowne 2 to jest gzip a jak nie to jest zwygle buforowanie danych po prostu chodzi o to ze nie moge dac include() na sama gore bo strone sie nie wyswietla musze buforowac strone jednak nie wiem zabardzo jak czytam ten oto art:
http://wortal.php.pl/phppl/wortal/artykuly/proces_tworzenia_aplikacji/tlumaczenia/buforowanie_wyjscia_z_php/buforowanie_wyjscia_z_php_buforowanie_wyjscia_po_stronie_serwera
Ale zabardzo nie rozumiem jak mam to zrobic.

Bede wdzieczny za jaka kolwiek pomoc

0

najprosciej mowiac strona jest buforowana za pomoca funkcji ob_start gdzie w jej parametrze wywolujesz funkcje operujaca na buforze tej strony. W tym przypadku mowisz programowi ze ma cala strone przepuscic przez funkcje ob_gzhandler. Oznacza to ze ta funkcja otrzyma cala zawartosc Twojej strony zanim zostanie ona wyslana do przegladarki po czym dokona na niej operacji (tu pewnie gzip) i wypusci efekt. Mozesz prosto zrobic cos takiego:

if ($gzip==2) {ob_start('ob_gzhandler');}
else {ob_start('jakas inna funkcja lub brak');}

Pamietaj tez ze zawartosc bufora zostanie wyslana do przegladarki dopiero po wywolaniu ob_end_flush() lub wyrzucona z pamieci bez wysylania do klienta za pomoca ob_end_clean();

wiecej w dokumentacji: http://pl2.php.net/manual/pl/function.ob-start.php

0
include('config1.php');
ini_set('zlib.output_compression', true);
ini_set('zlib.output_compression_level', 1);
if ($gzip == 2) ob_start('ob_gzhandler');
else ob_start();

Niestety juz sprawdzaken jest baira strona ale nie rozumie tego ob_end_flush/clean() moze jak to dodam bedzie dzialalo ale gdzie to dac??

P.S a duzo daje ta kompresja i warto ja stosowac?

EDIT:

Chodzi o cos takiego:

class GZip {
        var $compress, $uses_gzhandler;
        
        function __construct() {
            $this -> compress = false;
            $this -> uses_gzhandler = false;
            
            $phpver = phpversion();
            $useragent = $_SERVER['HTTP_USER_AGENT'];
            
            if (USE_GZ) {
                if ($phpver >= '4.0.4pl1' && (strstr($useragent,'compatible') || strstr($useragent,'Gecko'))) {
                    if (extension_loaded('zlib')) {
                        $this -> compress = true;
                        $this -> uses_gzhandler = true;
                        ob_start('ob_gzhandler');
                    }
                }
                else if ($phpver > '4.0') {
                    if (isset($_SERVER['HTTP_ACCEPT_ENCODING']) && strstr($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) {
                        if (extension_loaded('zlib')) {
                            $this -> compress = true;
                            ob_start();
                            ob_implicit_flush(0);
                            header('Content-Encoding: gzip');
                        }
                    }
                }
            }
            if (!$this -> compress) ob_start();
        }
        
        public function buffer_end_clear() {
            ob_end_clean();
        }
        
        public function display() {
            if (!$this -> uses_gzhandler && $this -> compress) {
                $gzip_size = ob_get_length();
                $gzip_contents = ob_get_clean();
                echo "\x1f\x8b\x08\x00\x00\x00\x00\x00", substr(gzcompress($gzip_contents, 1), 0, - 4), pack('V', crc32($gzip_contents)), pack('V', $gzip_size);  
            }
            else ob_end_flush();
            
            exit;
        }
    }

POtem w config:

define('USE_GZ', true);

Tylko ze struturalnie i bez sprawdzania wszelkich ustawien tak jak pokazalem wyzej jak nie spruboje uzyc ta klase ale nie warto mieszac OOP z moim kodem :)

P.S klasa nie dziala po prostu nie moge dac na samym poczatku include() nie wiem czemu koledze dziala

1 użytkowników online, w tym zalogowanych: 0, gości: 1