gzencode
(PHP 4 >= 4.0.4, PHP 5, PHP 7)
gzencode — Сжимает строку в формате gzip
Описание
$data
[, int $level
= -1
[, int $encoding_mode
= FORCE_GZIP
]] )
Возвращает сжатую версию входных данных data
,
аналогично выводу программы gzip.
Подробности о формате GZIP см. » Формат файла GZIP. Спецификация версии 4.3 (RFC 1952).
Список параметров
-
data
-
Данные для сжатия.
-
level
-
Уровень сжатия. 0 - без сжатия, 9 - максимальное сжатие. Если не указано, будет использоваться уровень сжатия по умолчанию библиотеки zlib.
-
encoding_mode
-
Режим сжатия, может быть
FORCE_GZIP
(по умолчанию) илиFORCE_DEFLATE
.До PHP 5.4.0 в случае использования
FORCE_DEFLATE
, возвращалась строка, сжатая по стандартному алгоритму zlib deflate (с заголовками zlib) после заголовка файла gzip, но без проверочной суммы crc32 в конце.Начиная с версии PHP 5.4.0, использование константы
FORCE_DEFLATE
генерирует вывод, совместимый с RFC 1950, состоящий из заголовка zlib, сжатых данных и контрольной суммы Adler.
Возвращаемые значения
Сжатая строка или FALSE
в случае ошибки.
Список изменений
Версия | Описание |
---|---|
5.4.0 |
FORCE_DEFLATE теперь генерирует вывод, совместимый
с RFC 1950.
|
Примеры
Возвращаемые данные будут содержать соответствующие заголовки и структуры данных как в обычном .gz-файле, например:
Пример #1 Создание файла gzip
<?php
$data = implode("", file("bigfile.txt"));
$gzdata = gzencode($data, 9);
$fp = fopen("bigfile.txt.gz", "w");
fwrite($fp, $gzdata);
fclose($fp);
?>
Смотрите также
- gzdecode() - Распаковывает строку, упакованную с помощью gzip
- gzdeflate() - Сжимает строку
- gzinflate() - Распаковывает строку
- gzuncompress() - Распаковывает строку
- gzcompress() - Сжимает строку
- » Спецификация ZLIB Compressed Data (RFC 1950)
Коментарии
this is a benchmark test of gzencode (.txt file)
----------------------------------------------
original file size = 3.29 MB (3,459,978 bytes)
compress lvl 1 = 1.09 MB (1,144,006 bytes)
compress lvl 2 = 1.06 MB (1,119,518 bytes)
compress lvl 3 = 1.03 MB (1,085,567 bytes)
compress lvl 4 = 953 KB (976,538 bytes)
compress lvl 5 = 909 KB (931,486 bytes)
compress lvl 6 = 910 KB (932,516 bytes)
compress lvl 7 = 910 KB (932,608 bytes)
compress lvl 8 = 910 KB (932,646 bytes)
compress lvl 9 = 910 KB (932,652 bytes)
----------------------------------------------
It may be difficult to understand the differences between "gzcompress", "gzdeflate" and "gzencode". Here are my notes:
gzcompress()
------------
Uses ZLIB_ENCODING_DEFLATE (https://www.php.net/manual/en/zlib.constants.php#constant.zlib-encoding-deflate)
ZLIB compression algorithm as per RFC 1950.
Compatible with pigz. (Not compatible with gzip.)
Has a header (compression details, begins with 0x78) and a footer (Adler32 checksum of uncompressed data in big-endian).
gzdeflate()
------------
Uses ZLIB_ENCODING_RAW (https://www.php.net/manual/en/zlib.constants.php#constant.zlib-encoding-raw)
DEFLATE algorithm as per RFC 1951.
No header and footer. Pure DEFLATE.
gzencode()
------------
Uses ZLIB_ENCODING_GZIP (https://www.php.net/manual/en/zlib.constants.php#constant.zlib-encoding-gzip)
GZIP algorithm as per RFC 1952.
Compatible with gzip.
Header begins with magic number 0x1f8b, then compression method 8 (DEFLATE), no file flags, no timestamp, with operating system ID.
Footer contains CRC32 checksum of uncompressed data and then size of uncompressed data, both in little-endian.