PHP 매뉴얼
이전 |  | 다음

# CXXIV. Zlib 압축 함수

# 소개

이 모듈은 gzip (.gz) 압축 파일을 읽고 쓸 수 있게 하며, 버전에 따라서는 대부분의 파일시스템 함수에서 gzip-압축 파일 작업을 할 수 있게 합니다. (비압축 파일도 가능하지만, 소켓에는 불가능합니다)

> 참고: 버전 4.0.4에서 .gz 파일을 위해 'zlib:' URL로 접근하는 fopen-랩퍼가 추가되었습니다. fopen()을 호출할 때 파일 이름이나 경로 앞에 'zlib:'을 덧붙여서 보통의 f*() 파일 접근 함수에서 압축 파일에 자유롭게 접근할 수 있습니다.

> 버전 4.3.0에서 이 특별한 전치사는 ':'을 포함하는 파일 이름과의 혼동을 막기 위해서 'zlib://'으로 변경되었습니다.

> 이 기능은 `fopencookie()` 함수를 제공하는 C 런타임 라이브러리가 필요합니다. 현재 알려진 바로는 GNU libc가 이 기능을 제공하는 유일한 라이브러리입니다.

# 요구 사항

이 모듈을 Jean-loup Gailly와 Mark Adler가 작성한 zlib의 함수들을 사용합니다. 이 모듈에서는 zlib 버전 >= 1.0.9를 사용해야 합니다.

# 설치

PHP의 Zlib 지원은 기본값으로 활성화되어 있지 않습니다. PHP를 `--with-zlib[=DIR]`로 설정해야 합니다.

`PHP` 윈도우 버전에서는 이 확장 모듈에 대한 지원이 포함되어 있습니다. 이 함수들을 이용하기 위해서 추가로 확장 모듈을 읽어들일 필요가 없습니다.

> 참고: 윈도우즈에서 zlib 지원 내장은 PHP 4.3.0에서 이루어졌습니다.

# 런타임 설정

이 함수의 작동은 `php.ini` 설정에 영향을 받습니다.

zlib 확장은 브라우저가 지원한다면, 페이지를 전송할 때 압축할 수 있는 옵션을 제공합니다. 설정 파일 `php.ini`에 세가지 옵션이 존재합니다.

표 1. Zlib 설정 옵션

이름 | 기본값 | 변경가능성
--- | --- | ---
zlib.output_compression | "Off" | PHP_INI_ALL
zlib.output_compression_level | "-1" | PHP_INI_ALL
zlib.output_handler | "" | PHP_INI_ALL

PHP_INI_* 상수에 대한 자세한 내용 및 정의는 ini_set()을 참고하십시오

위 설정 지시어에 대한 간단한 설명입니다.

`zlib.output_compression` boolean/integer

  페이지 압축의 사용 여부. 이 옵션을 `php.ini`나 아파치 설정에서 "On"으로 지정하면, 브라우저가 "Accept-Encoding: gzip"이나 "deflate" 헤더를 보냈을때, 페이지를 압축합니다. "Content-Encoding: gzip"(혹은 "deflate")과 "Vary: Accept-Encoding" 헤더을 출력에 추가합니다.

  헤더를 전송하기 전에 ini_set()을 사용해서 스크립트 내부에서 무효화할 수 있습니다. "Content-Type: image/" 헤더를 출력해도 압축을 무효화합니다(넷스케이프 버그로 인해). 이미지 content-type 헤더 호출을 추가한 뒤에 "ini_set('zlib.output_compression', 'On')"을 추가하여 다시 활성화 할 수 있습니다.

  boolean "On"/"Off" 외에 정수값을 지정하여, 출력 버퍼 크기를 설정할 수 있습니다. (기본값은 4KB) (default is 4KB).

  > 참고: 'On'으로 지정했을 때, output_handler는 zlib.output_handler를 사용하지 말고, 비어있어야 합니다!

`zlib.output_compression_level` integer

  출력 압축에 사용하는 압축 레벨.

`zlib.output_handler` string

  zlib.output_compression을 활성화 했을 때, 추가 출력 핸들러를 지정할 수 없습니다. 이 설정은 output_handler와 동일한 다른 명령입니다.

# 리소스 종류

이 확장 모듈은 리소스형을 정의하지 않습니다.

# 상수 정의

이 확장 모듈은 다음의 상수를 정의합니다. 이는 확장 모듈을 PHP에 내장했거나, 실행시에 동적으로 읽어들일 경우에만 사용할 수 있습니다.

`FORCE_GZIP` (integer)

`FORCE_DEFLATE` (integer)

# 예제

이 예제는 임시 파일을 열어서 테스트 문자열을 쓰고, 이 파일의 내용을 두번 출력합니다.

예 1. 작은 Zlib 예제

`<?php
$filename = tempnam('/tmp', 'zlibtest') . '.gz';
echo "<html>\n<head></head>\n<body>\n<pre>\n";
$s = "Only a test, test, test, test, test, test, test, test!\n";
// 최대 압축으로 쓰기 위한 파일을 엽니다.
$zp = gzopen($filename, "w9");
// 파일에 문자열을 씁니다.
gzwrite($zp, $s);
// 파일을 닫습니다.
gzclose($zp);
// 읽기 위해 파일을 엽니다.
$zp = gzopen($filename, "r");
// 3 문자를 읽습니다.
echo gzread($zp, 3);
// 파일을 끝까지 출력하고 닫습니다.
gzpassthru($zp);
gzclose($zp);
echo "\n";
// 파일을 읽어서 내용을 출력합니다. (두번째)
if (readgzfile($filename) != strlen($s)) {
echo "zlib 함수의 에러!";
}
unlink($filename);
echo "</pre>\n</body>\n</html>\n";
?>`

이전 | 처음으로 | 다음
zip_read | 위로 | gzclose