PHP에서 압축 전송하는 방법은 크게 세 가지이다.
- 작은숲:위키노트/아파치 mod_deflate 모듈 등의 웹 서버에서 제공하는 압축 전송 모듈
php.ini나.htaccess파일, 혹은 PHP 파일에서 zlib.output_compression 설정- 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() 함수의 콜백 함수로 사용되었다.