PHP 매뉴얼
이전 | K. 부록. List of Available Filters | 다음

# Compression Filters

While the `압축 스트림' 절의 부록 J provide a way of creating gzip and bz2 compatable files on the local filesystem, they do not provide a means for generalized compression over network streams, nor do they provide a means to begin with a non-compressed stream and transition to a compressed one. For this, a compression filter may be applied to any stream resource at any time.

> 참고: Compression filters do not generate headers and trailers used by commandline utilites such as `gzip`. They only compress and decompress the payload portions of compressed data streams.

`zlib.deflate` (compression) and `zlib.inflate` (decompression) are implementations of the compression methods described in RFC 1951. The `deflate` filter takes up to three parameters passed as an associative array. `level` describes the compression strength to use (1-9). Higher numbers will generally yield smaller payloads at the cost of additional processing time. Two special compression levels also exist: 0 (for no compression at all), and -1 (zlib internal default -- currently 6). `window` is the base-2 log of the compression loopback window size. Higher values (up to 15 -- 32768 bytes) yield better compression at a cost of memory, while lower values (down to 9 -- 512 bytes) yield worse compression in a smaller memory footprint. Default `window` size is currently `15`. `memory` is a scale indicating how much work memory should be allocated. Valid values range from 1 (minimal allocation) to 9 (maximum allocation). This memory allocation affects speed only and does not impact the size of the generated payload.

> 참고: Because compression level is the most commonly used parameter, it may be alternatively provided as a simple integer value (rather than an array element).

> 참고: The zlib.* filters are not currently built into the PHP core. To enable these filters in `PHP 5`, install the zlib_filter package from PECL. These filters are not available for `PHP 4`.

예 K-7. `zlib.deflate` and `zlib.inflate`

`<?php
$params = array('level' => 6, 'window' => 15, 'memory' => 9);
$original_text = "This is a test.\nThis is only a test.\nThis is not an important string.\n";
echo "The original text is " . strlen($original_text) . " characters long.\n";
$fp = fopen('test.deflated', 'w');
stream_filter_append($fp, 'zlib.deflate', STREAM_FILTER_WRITE, $params);
fwrite($fp, $original_text);
fclose($fp);
echo "The compressed file is " . filesize('test.deflated') . " bytes long.\n";
echo "The original text was:\n";
/* Use readfile and zlib.inflate to decompress on the fly */
readfile('php://filter/zlib.inflate/resource=test.deflated');
/* Generates output:
The original text is 70 characters long.
The compressed file is 56 bytes long.
The original text was:
This is a test.
This is only a test.
This is not an important string.
*/
?>`

예 K-8. `zlib.deflate` simple

`<?php
$original_text = "This is a test.\nThis is only a test.\nThis is not an important string.\n";
echo "The original text is " . strlen($original_text) . " characters long.\n";
$fp = fopen('test.deflated', 'w');
/* Here "6" indicates compression level 6 */
stream_filter_append($fp, 'zlib.deflate', STREAM_FILTER_WRITE, 6);
fwrite($fp, $original_text);
fclose($fp);
echo "The compressed file is " . filesize('test.deflated') . " bytes long.\n";
/* Generates output:
The original text is 70 characters long.
The compressed file is 56 bytes long.
*/
?>`

`bzip2.compress` and `bzip2.decompress` work in the same manner as the zlib filters described above. The `bzip2.compress` filter accepts up to two parameters given as elements of an associative array: `blocks` is an integer value from 1 to 9 specifying the number of 100kbyte blocks of memory to allocate for workspace. `work` is also an integer value ranging from 0 to 250 indicating how much effort to expend using the normal compression method before falling back on a slower, but more reliable method. Tuning this parameter effects only compression speed. Neither size of compressed output nor memory usage are changed by this setting. A work factor of 0 instructs the bzip library to use an internal default. The `bzip2.decompress` filter only accepts one parameter, which can be passed as either an ordinary boolean value as the `small` element of an associative array. `small`, when set to a `TRUE` value, instructs the bzip library to perform decompression in a minimal memory footprint at the cost of speed.

> 참고: The bzip2.* filters are not currently built into the PHP core. To enable these filters in `PHP 5`, install the bz2_filter package from PECL. These filters are not available for `PHP 4`.

예 K-9. `bzip2.compress` and `bzip2.decompress`

`<?php
$param = array('blocks' => 9, 'work' => 0);
echo "The original file is " . filesize('LICENSE') . " bytes long.\n";
$fp = fopen('LICENSE.compressed', 'w');
stream_filter_append($fp, 'bzip2.compress', STREAM_FILTER_WRITE, $param);
fwrite($fp, file_get_contents('LICENSE'));
fclose($fp);
echo "The compressed file is " . filesize('LICENSE.compressed') . " bytes long.\n";
/* Generates output:
The original text is 3288 characters long.
The compressed file is 1488 bytes long.
*/
?>`

이전 | 처음으로 | 다음
Conversion Filters | 위로 | 지원되는 소켓 전송 목록