gzencode
(PHP 4 >= 4.0.4, PHP 5)
gzencode — Create a gzip compressed string
Description
$data
[, int $level
= -1
[, int $encoding_mode
= FORCE_GZIP
]] )
This function returns a compressed version of the input
data
compatible with the output of the
gzip program.
For more information on the GZIP file format, see the document: » GZIP file format specification version 4.3 (RFC 1952).
Parameters
-
data
-
The data to encode.
-
level
-
The level of compression. Can be given as 0 for no compression up to 9 for maximum compression. If not given, the default compression level will be the default compression level of the zlib library.
-
encoding_mode
-
The encoding mode. Can be
FORCE_GZIP
(the default) orFORCE_DEFLATE
.Prior to PHP 5.4.0, using
FORCE_DEFLATE
results in a standard zlib deflated string (inclusive zlib headers) after a gzip file header but without the trailing crc32 checksum.In PHP 5.4.0 and later,
FORCE_DEFLATE
generates RFC 1950 compliant output, consisting of a zlib header, the deflated data, and an Adler checksum.
Return Values
The encoded string, or FALSE
if an error occurred.
Changelog
Version | Description |
---|---|
5.4.0 |
FORCE_DEFLATE now generates RFC 1950 compliant
output.
|
4.2.0 |
The encoding_mode parameter was added
|
Examples
The resulting data contains the appropriate headers and data structure to make a standard .gz file, e.g.:
Example #1 Creating a gzip file
<?php
$data = implode("", file("bigfile.txt"));
$gzdata = gzencode($data, 9);
$fp = fopen("bigfile.txt.gz", "w");
fwrite($fp, $gzdata);
fclose($fp);
?>
See Also
- gzdecode() - Decodes a gzip compressed string
- gzdeflate() - Deflate a string
- gzinflate() - Inflate a deflated string
- gzuncompress() - Uncompress a compressed string
- gzcompress() - Compress a string
- » ZLIB Compressed Data Format Specification (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.