본문 바로가기

Development/PHP

gzip 인코딩 압축 전송 사용하기

출처 : http://qnrdlqkrwhdgns.canxan.com/jpboard/post/491


일단, 브라우저가 gzip을 지원하는지 여부를 알아야한다.

function hasAcceptEncoding($encoding) { return (stripos($_SERVER['HTTP_ACCEPT_ENCODING'], $encoding) !== false); }

그리고 gzip을 사용한다고 브라우저에 알려야한다.
header('Content-Encoding: gzip');

마지막으로 gzip 인코딩으로 압축해서 뿌리면 된다.'
echo gzencode($content);

JpBoard에서는 기본적으로 gzip 인코딩으로 압축전송을 한다.
실험해본결과 8KB의 경우 2KB 정로도 압축이 되었다.(보통 1/4 ~ 1/3 정도로 사이즈가 줄여지며 압축이 되었다.)

JpBoard에서는 ob_start() 를 이용해서 일단, 출력하지 않고 출력될 내용을 특정 변수에다 모아놓은 다음
gzip 인코딩을 한뒤 출력을 한다.

전체적으로 소스를 보자면(/jpboard.php 파일을 참고)
$documentBuffer = $headBuffer.$contentBuffer.$footBuffer; if(hasAcceptEncoding('gzip') && Config::get('useGzip')) { header('Content-Encoding: gzip'); $documentBuffer = gzencode($documentBuffer); } echo $documentBuffer;