ANTICHAT

ANTICHAT (https://forum.antichat.io/index.php)
-   PHP (https://forum.antichat.io/forumdisplay.php?f=37)
-   -   GZip сжатие. (https://forum.antichat.io/showthread.php?t=66447)

[x26]VOLAND 05.04.2008 03:15

GZip сжатие.
 
Реализация GZip сжатия. Новичкам может помочь.

PHP код:

function Gzip($debug=0, $level=9) {

    function 
GzipEnc() {
        if (
headers_sent() || connection_aborted())
        {
            return 
0; 
        }
        if (
strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'x-gzip') !== false) return "x-gzip"; 
        if (
strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== false) return "gzip";
        return 
0; 
    }

    
header("Last-Modified: " . date('r', time()-60*60*10) ." GMT");
    if (
config('gzip') != 1)
    {
        if (
$debug) echo $s; ob_end_flush(); return;
    }

    
$enc = GzipEnc();
    if (
$enc)
    {
        
$s = "\n<!-- Для вывода использовалось сжатие $enc -->\n"; 
        
$Contents = ob_get_contents();
        
ob_end_clean(); 
        if (
$debug)
        {
            
$s .= "<!-- Общий размер файла: ".strlen($Contents)." байт ";
            
$s .= "После сжатия: ".strlen(gzcompress($Contents, $level))." байт -->";
            
$Contents .= $s;
        }
        
header("Content-Encoding: $enc");
        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);
        die();
    }
    else
    {
        
ob_end_flush();
        die();
    }
} 

В конец скрипта ставим:
PHP код:

Gzip(true); 


DIAgen 05.04.2008 12:38

Где то я уже видел эту реализацию, даже припоминаю ;) DLE cms


Время: 10:58