PHP에서 압축 전송하는 방법은 크게 세 가지이다.

  1. 작은숲:위키노트/아파치 mod_deflate 모듈 등의 웹 서버에서 제공하는 압축 전송 모듈
  2. php.ini.htaccess 파일, 혹은 PHP 파일에서 zlib.output_compression 설정
  3. PHP 파일에서 ob_gzhander() 함수 사용

대부분 1, 2, 3번 순서로 권장한다. 그리고 이 방법들은 같이 사용할 수 없다. 둘 이상의 방법을 함께 적용하면 압축한 내용을 다시 압축하기 때문에 브라우저에서 제대로 해석하지 못한다.

웹 서버의 압축 전송 모듈 사용

작은숲:위키노트/아파치 mod_deflate 모듈 등의 웹 서버에서 제공하는 압축 전송 모듈을 사용하는 것은 가장 효율적이며 권장하는 방법이다. 사용할 수 있다면 사용하는 것이 좋다. 웹 서버에서 제공하는 압축 전송 모듈을 사용하면 PHP 파일 뿐 아니라 압축할 수 있는 모든 텍스트 형태의 파일들, 즉 CSS, 자바스크립트 등의 파일들도 압축해서 전송한다. 트래픽 양으로만 따지면, 압축률와 주로 사용하는 파일의 종류에 따라 다르겠지만 대략 60~80% 정도 트래픽을 줄일 수 있다.

zlib.output_compression 설정

PHP에 zlib 모듈이 적재되어 있다면 zlib.output_compression 지시자를 쓸 수 있다. zlib.output_compression 지시자는 PHP에서 zlib를 사용해 압축 전송하도록 설정한다. php.ini.htaccess 파일에 아래 내용을 추가한다.

output_handler = Off
zlib.output_compression = On
zlib.output_handler = ob_gzhandler

이 설정은 서버 내의 모든 PHP 파일에 적용된다. php.ini.htaccess 파일을 사용할 수 없거나 특정한 PHP 파일에만 적용하고자 할 때는 ini_set() 함수를 사용한다.

ini_set('output_handler') = 'Off';
ini_set('zlib.output_compression') = 'On';
ini_set('zlib.output_handler ') = 'ob_gzhandler';

ob_gzhander() 함수 사용

웹 서버의 압축 전송 모듈과 PHP의 zlib 모듈을 사용할 수 없다면 ob_gzhander() 함수를 사용한다.

ob_start("ob_gzhandler");

여기에서 ob_gzhander() 함수는 ob_start() 함수의 콜백 함수로 사용되었다.

같이 보기

참고