압축 필터

압축 래퍼는 로컬 파일 시스템에서 gzip 및 bz2 호환 파일을 생성하는 방법을 제공하지만 네트워크 스트림을 통해 일반화된 압축 수단을 제공하지 않으며 압축되지 않은 스트림으로 시작하여 압축된 것. 이를 위해 압축 필터는 언제든지 모든 스트림 리소스에 적용될 수 있습니다.

참고: 압축 필터는 gzip과 같은 명령줄 유틸리티에서 사용하는 헤더와 트레일러를 생성하지 않습니다. 압축된 데이터 스트림의 페이로드 부분만 압축 및 압축 해제합니다.


zlib.deflate and zlib.inflate

zlib.deflate(압축) 및 zlib.inflate(압축 해제)는 » RFC 1951에 설명된 압축 방법의 구현입니다. deflate 필터는 연관 배열로 전달되는 매개변수를 최대 3개까지 사용합니다. 레벨은 사용할 압축 강도를 나타냅니다(1-9). 숫자가 높을수록 일반적으로 추가 처리 시간이 필요하지만 페이로드가 작아집니다. 0(압축이 전혀 없는 경우) 및 -1(zlib 내부 기본값 -- 현재 6)의 두 가지 특수 압축 수준도 있습니다. window는 압축 루프백 창 크기의 base-2 로그입니다. 더 높은 값(최대 15 - 32768바이트)은 메모리 비용으로 더 나은 압축을 생성하는 반면, 더 낮은 값(최소 9 - 512바이트)은 더 작은 메모리 공간에서 더 나쁜 압축을 생성합니다. 기본 창 크기는 현재 15입니다. 메모리는 할당되어야 하는 작업 메모리의 양을 나타내는 척도입니다. 유효한 값의 범위는 1(최소 할당)에서 9(최대 할당)까지입니다. 이 메모리 할당은 속도에만 영향을 미치고 생성된 페이로드의 크기에는 영향을 미치지 않습니다.

참고: 압축 수준은 가장 일반적으로 사용되는 매개변수이기 때문에 (배열 요소가 아닌) 간단한 정수 값으로 제공될 수도 있습니다.

zlib 지원이 활성화된 경우 zlib.* 압축 필터를 사용할 수 있습니다.

예제 #1 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.

 */
?>
                  
                

예제 #2 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

bzip2.compress 및 bzip2.decompress는 위에서 설명한 zlib 필터와 동일한 방식으로 작동합니다. bzip2.compress 필터는 연관 배열의 요소로 지정된 최대 두 개의 매개변수를 허용합니다. 블록은 작업 공간에 할당할 100kbyte 메모리 블록 수를 지정하는 1에서 9 사이의 정수 값입니다. work는 또한 느리지만 더 안정적인 방법으로 폴백하기 전에 일반 압축 방법을 사용하여 얼마나 많은 노력을 소비해야 하는지를 나타내는 0에서 250 사이의 정수 값입니다. 이 매개변수를 조정하면 압축 속도에만 영향을 줍니다. 압축된 출력의 크기나 메모리 사용량은 이 설정에 의해 변경되지 않습니다. 작업 계수가 0이면 bzip 라이브러리가 내부 기본값을 사용하도록 지시합니다. bzip2.decompress 필터는 하나의 매개변수만 허용하며 이는 일반 부울 값 또는 연관 배열의 작은 요소로 전달할 수 있습니다. small은 true 값으로 설정하면 속도를 희생하면서 최소한의 메모리 공간에서 압축 해제를 수행하도록 bzip 라이브러리에 지시합니다.

bzip2.* 압축 필터는 bz2 지원이 활성화된 경우 사용할 수 있습니다.

예제 #3 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.

 */
?>