gzcompress

(PHP 4 >= 4.0.1, PHP 5)

gzcompress — Сжимает строку

Описание

string gzcompress ( string $data [, int $level ] )

Сжимает строку используя формат данных ZLIB.

Для подробностей по алгоритму сжатия ZLIB, см. "» ZLIB Compressed Data Format Specification 3.3" (RFC 1950).

Замечание: Это не есть gzip-сжатие, которое включает некоторые заголовочные данные. Для gzip-сжатие обратитесь к gzencode().

Список параметров

data

Данные для сжаитя.

level

Уровень сжатия. 0 - без сжатия, 9 - максимум.

Возвращаемые значения

Сжатая строка или FALSE в случае ошибки.

Смотрите также

Коментарии

No, it doesn't return gzip compressed data -- specifically, the CRC is messed up.  However, after massaging the output a lot, I have come up with a solution.  I also commented it a lot, pointing out odd things.

<?php
// Start the output buffer
ob_start();
ob_implicit_flush(0);

// Output stuff here...

// Get the contents of the output buffer   
$contents ob_get_contents();
ob_end_clean();

// Tell the browser that they are going to get gzip data
// Of course, you already checked if they support gzip or x-gzip
// and if they support x-gzip, you'd change the header to say
// x-gzip instead, right?
header("Content-Encoding: gzip");

// Display the header of the gzip file
// Thanks ck@medienkombinat.de!
// Only display this once
echo "\x1f\x8b\x08\x00\x00\x00\x00\x00";

// Figure out the size and CRC of the original for later
$Size strlen($contents);
$Crc crc32($contents);

// Compress the data
$contents gzcompress($contents9);

// We can't just output it here, since the CRC is messed up.
// If I try to "echo $contents" at this point, the compressed
// data is sent, but not completely.  There are four bytes at
// the end that are a CRC.  Three are sent.  The last one is
// left in limbo.  Also, if we "echo $contents", then the next
// byte we echo will not be sent to the client.  I am not sure
// if this is a bug in 4.0.2 or not, but the best way to avoid
// this is to put the correct CRC at the end of the compressed
// data.  (The one generated by gzcompress looks WAY wrong.)
// This will stop Opera from crashing, gunzip will work, and
// other browsers won't keep loading indefinately.
//
// Strip off the old CRC (it's there, but it won't be displayed
// all the way -- very odd)
$contents substr($contents0strlen($contents) - 4);

// Show only the compressed data
echo $contents;

// Output the CRC, then the size of the original
gzip_PrintFourChars($Crc);
gzip_PrintFourChars($Size);


// Done.  You can append further data by gzcompressing
// another string and reworking the CRC and Size stuff for
// it too.  Repeat until done.


function gzip_PrintFourChars($Val)
{
    for (
$i 0$i 4$i ++)
    {
        echo 
chr($Val 256);
       
$Val floor($Val 256);
    }
}
?>
2000-09-27 02:30:25
http://php5.kiev.ua/manual/ru/function.gzcompress.html
gzipped strings include header/metadata you can use to determine if a string is gzipped or not , but since gzcompress does not include that I found myself needing a way to determine if a string was compressed or not.      After some research (and then improvements) i came up with this:

/**
 * determines if a string is a gzipped string supporting strings
 * encoded with either gzencode or gzcompress
 *
 * @param string $string the string to check for compression
 * @return bool whether or not the string was compmressed
 */
function is_gzipped($string) {
    return mb_strpos($string, "\x1f\x8b\x08", 'US-ASCII') === 0 && @gzuncompress($string) !== FALSE;
}
2017-09-05 03:16:27
http://php5.kiev.ua/manual/ru/function.gzcompress.html

    Поддержать сайт на родительском проекте КГБ