Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[php] compressie

Pagina: 1
Acties:

  • Elroy
  • Registratie: April 2000
  • Laatst online: 10-11 16:48

Elroy

Zelda!!!

Topicstarter
Hoi,

Ik wou op de server waar ik mijn homepage heb staan php compressie gebruiken alleen het lukt niet echt. Ik heb de host al een mailtje gestuurd en hij zij dat zlib ondersteund wordt enzo. en dat ik het kan gebruiken.
zie PHP_Info

Nu heb ik de volgende code gebruikt :
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?
ob_start(); 
ob_implicit_flush(0); 
function CheckCanGzip(){ 
    global $HTTP_ACCEPT_ENCODING;    
    if (headers_sent() || connection_timeout() || connection_aborted()){ 
        return 0; 
    } 
    if (strpos($HTTP_ACCEPT_ENCODING, 'x-gzip') !== false) return "x-gzip"; 
    if (strpos($HTTP_ACCEPT_ENCODING,'gzip') !== false) return "gzip"; 
    return 0; 
} 
/* $level = compression level 0-9, 0=none, 9=max */
function GzDocOut($level=1,$debug=0){ 
    $ENCODING = CheckCanGzip(); 
    if ($ENCODING){ 
        print "\n<!-- Use compress $ENCODING -->\n"; 
        $Contents = ob_get_contents(); 
        ob_end_clean(); 
        if ($debug){ 
            $s = "<p>Not compress length: ".strlen($Contents); 
            $s .= "<br>Compressed length: ".strlen(gzcompress($Contents,$level));
            $Contents .= $s; 
        }
        header("Content-Encoding: $ENCODING");      
        print "\x1f\x8b\x08\x00\x00\x00\x00\x00"; 
        $Size = strlen($Contents); 
        $Crc = crc32($Contents); 
        $Contents = gzcompress($Contents,$level); 
        $Contents = substr($Contents, 0, strlen($Contents) - 4); 
        print $Contents; 
        print pack('V',$Crc); 
        print pack('V',$Size); 
        exit; 
    }else{ 
        ob_end_flush(); 
        exit; 
    } 
} 
?>

Deze code heb ik geinclude van index.php
PHP:
1
2
3
4
5
<?
include('php/gzdoc.php');?>
bla bla
<?gzdocout();
?>

Maar volgens mij werkt deze code helemaal niet meer sind versie 4.01 ofzo. Ik heb nu 4.06.

Weet iemand hoe ik de compressie aan het werk kan krijgen :?

Specs Computer


  • Engineer
  • Registratie: Juni 2001
  • Laatst online: 03-07 23:56

Engineer

Software

.

[ Voor 100% gewijzigd door Engineer op 13-10-2018 23:13 ]


Verwijderd

Als je Apache server gebruikt kun je die laten compressen dan hoef je dat niet meer in PHP te doen.

Zie http://www.remotecommunications.com/apache/mod_gzip/

  • Elroy
  • Registratie: April 2000
  • Laatst online: 10-11 16:48

Elroy

Zelda!!!

Topicstarter
Op vrijdag 28 december 2001 19:34 schreef Thargol het volgende:
Als je Apache server gebruikt kun je die laten compressen dan hoef je dat niet meer in PHP te doen.

Zie http://www.remotecommunications.com/apache/mod_gzip/
Ik zelf beheer de server niet en ik denk niet dat ze het leuk vinden als ze nieuwe software moeten installeren.
Is het dan ook mogelijk om het via php te doen ?

Specs Computer


  • Engineer
  • Registratie: Juni 2001
  • Laatst online: 03-07 23:56

Engineer

Software

.

[ Voor 100% gewijzigd door Engineer op 13-10-2018 23:12 ]


Verwijderd

Kant en klare snippet staat ook in het codebase topic.

  • Elroy
  • Registratie: April 2000
  • Laatst online: 10-11 16:48

Elroy

Zelda!!!

Topicstarter
Op vrijdag 28 december 2001 19:47 schreef hdd het volgende:
Zijn mijn reply's invisble ofzo :?
Nee ik heb het wel gelezen, maar als ze ze erboven zet dat komt er in ieder geval geen foutmelding meer maar hij compressed tevens ook niet. Dus het resultaat is hetzelfde

Specs Computer


  • Elroy
  • Registratie: April 2000
  • Laatst online: 10-11 16:48

Elroy

Zelda!!!

Topicstarter
Nog effe een vraagje ik heb de volgende code toegepast :
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
<?
class gzip_encode {

    var $_version = 0.67; // Version of the gzip_encode class

    var $level;        // Compression level
    var $encoding;    // Encoding type
    var $crc;        // crc of the output
    var $size;        // size of the uncompressed content
    var $gzsize;    // size of the compressed content


    function gzip_encode($level = 9, $debug = false) {
    global $HTTP_ACCEPT_ENCODING;
    if (!function_exists('gzcompress')) {
        trigger_error('gzcompress not found, ' .
            'zlib needs to be installed for gzip_encode',
            E_USER_WARNING);
        return;
    }
    if (!function_exists('crc32')) {
        trigger_error('crc32() not found, ' .
            'PHP >= 4.0.1 needed for gzip_encode', E_USER_WARNING);
        return;
    }
    if (headers_sent()) return;
    if (connection_status() !== 0) return;
    $encoding = $this->gzip_accepted();
    if (!$encoding) return;
    $this->encoding = $encoding;

    if ($level === true) {
        $level = $this->get_complevel();
    }
    $this->level = $level;

    $contents = ob_get_contents();
    if ($contents === false) return;

    $gzdata = "\x1f\x8b\x08\x00\x00\x00\x00\x00"; // gzip header
    $size = strlen($contents);
    $crc = crc32($contents);
    $gzdata .= gzcompress($contents, $level);
    $gzdata = substr($gzdata, 0, strlen($gzdata) - 4); // fix crc bug
    $gzdata .= pack("V",$crc) . pack("V", $size);

    $this->size = $size;
    $this->crc = $crc;
    $this->gzsize = strlen($gzdata);

    if ($debug) {
        return;
    }

    ob_end_clean();
    Header('Content-Encoding: ' . $encoding);
    Header('Vary: Accept-Encoding');
    Header('Content-Length: ' . strlen($gzdata));
    Header('X-Content-Encoded-By: class.gzip_encode '.$this->_version);

    echo $gzdata;
    }
 
    function gzip_accepted() {
    global $HTTP_ACCEPT_ENCODING;
    if (strpos($HTTP_ACCEPT_ENCODING, 'gzip') === false) return false;
    if (strpos($HTTP_ACCEPT_ENCODING, 'x-gzip') === false)
    {
        $encoding = 'gzip';
    } 
    else 
    {
        $encoding = 'x-gzip';
    }

    // Test file type. I wish I could get HTTP response headers.
    $magic = substr(ob_get_contents(),0,4);
    if (substr($magic,0,2) === '^_') {
        // gzip data
        $encoding = false;
    } else if (substr($magic,0,3) === 'GIF') {
        // gif images
        $encoding = false;
    } else if (substr($magic,0,2) === "\xFF\xD8") {
        // jpeg images
        $encoding = false;
    } else if (substr($magic,0,4) === "\x89PNG") {
        // png images
        $encoding = false;
    } else if (substr($magic,0,3) === 'FWS') {
        // Don't gzip Shockwave Flash files. Flash on windows incorrectly
        // claims it accepts gzip'd content.
        $encoding = false;
    } else if (substr($magic,0,2) === 'PK') {
        // pk zip file
        $encoding = false;
    }

    return $encoding;
    }

    function get_complevel() {
    $uname = posix_uname();
    switch ($uname['sysname']) {
        case 'Linux':
        $cl = (1 - $this->linux_loadavg()) * 10;
        $level = (int)max(min(9, $cl), 0);
        break;
        case 'FreeBSD':
        $cl = (1 - $this->freebsd_loadavg()) * 10;
        $level = (int)max(min(9, $cl), 0);
        break;
        default:
        $level = 9;
        break;
    }
    return $level;
    }

    function linux_loadavg() {
    $buffer = "0 0 0";
    $f = fopen("/proc/loadavg","r");
    if (!feof($f)) {
        $buffer = fgets($f, 1024);
    }
    fclose($f);
    $load = explode(" ",$buffer);
    return max((float)$load[0], (float)$load[1], (float)$load[2]);
    }

    function freebsd_loadavg() {
    $buffer= `uptime`;
    ereg("averag(es|e): ([0-9][.][0-9][0-9]), ([0-9][.][0-9][0-9]), ([0-9][.][0-9][0-9]*)", $buffer, $load);

    return max((float)$load[2], (float)$load[3], (float)$load[4]);
    } 
}
?>

En in de index :
PHP:
1
2
3
4
5
6
7
8
9
<?
ob_start();
include('php/gzdoc.php');?>

code

<?
new gzip_encode();
?>

Deze compressie werkt wel alleen van de 14kb grootte bestand haalt hij er maar 400 bytes vanaf ;(

Weet iemand of de code ook speciaal opgemaakt moet worden ofzo. Want mijn code begint altijd met <? en helemaal aan het einde pas ?> dus alle tabbellen zijn met echo"<table enz>"; gedaan.

Weet iemand een oplossing want met zulke kleine compressies kan ik niet leven

[ Voor 1% gewijzigd door D2k op 17-02-2003 09:04 ]

Specs Computer


Verwijderd

En zlib is wel geinstalleerd en meegecompileerd met php?
Pagina: 1