작은숲:위키노트/PHP 압축 전송: 두 판 사이의 차이
잔글 (문자열 찾아 바꾸기 - "<source" 문자열을 "<syntaxhighlight" 문자열로) |
|||
| 8번째 줄: | 8번째 줄: | ||
== <tt>zlib.output_compression</tt> 설정 == | == <tt>zlib.output_compression</tt> 설정 == | ||
PHP에 zlib 모듈이 적재되어 있다면 <tt>[[위키노트:PHP:zlib.configuration|zlib.output_compression]]</tt> 지시자를 쓸 수 있다. <tt>zlib.output_compression</tt> 지시자는 PHP에서 zlib를 사용해 압축 전송하도록 설정한다. <code>php.ini</code>나 <code>.htaccess</code> 파일에 아래 내용을 추가한다. | PHP에 zlib 모듈이 적재되어 있다면 <tt>[[위키노트:PHP:zlib.configuration|zlib.output_compression]]</tt> 지시자를 쓸 수 있다. <tt>zlib.output_compression</tt> 지시자는 PHP에서 zlib를 사용해 압축 전송하도록 설정한다. <code>php.ini</code>나 <code>.htaccess</code> 파일에 아래 내용을 추가한다. | ||
< | <syntaxhighlight lang="cfg"> | ||
output_handler = Off | output_handler = Off | ||
zlib.output_compression = On | zlib.output_compression = On | ||
| 14번째 줄: | 14번째 줄: | ||
</source> | </source> | ||
이 설정은 서버 내의 모든 PHP 파일에 적용된다. <code>php.ini</code>나 <code>.htaccess</code> 파일을 사용할 수 없거나 특정한 PHP 파일에만 적용하고자 할 때는 <code>[[위키노트:PHP:ini_set|ini_set]]()</code> 함수를 사용한다. | 이 설정은 서버 내의 모든 PHP 파일에 적용된다. <code>php.ini</code>나 <code>.htaccess</code> 파일을 사용할 수 없거나 특정한 PHP 파일에만 적용하고자 할 때는 <code>[[위키노트:PHP:ini_set|ini_set]]()</code> 함수를 사용한다. | ||
< | <syntaxhighlight lang="php"> | ||
ini_set('output_handler') = 'Off'; | ini_set('output_handler') = 'Off'; | ||
ini_set('zlib.output_compression') = 'On'; | ini_set('zlib.output_compression') = 'On'; | ||
| 21번째 줄: | 21번째 줄: | ||
== <tt>ob_gzhander()</tt> 함수 사용 == | == <tt>ob_gzhander()</tt> 함수 사용 == | ||
웹 서버의 압축 전송 모듈과 PHP의 zlib 모듈을 사용할 수 없다면 <code>[[위키노트:PHP:ob_gzhander|ob_gzhander]]()</code> 함수를 사용한다. | 웹 서버의 압축 전송 모듈과 PHP의 zlib 모듈을 사용할 수 없다면 <code>[[위키노트:PHP:ob_gzhander|ob_gzhander]]()</code> 함수를 사용한다. | ||
< | <syntaxhighlight lang="php"> | ||
ob_start("ob_gzhandler"); | ob_start("ob_gzhandler"); | ||
</source> | </source> | ||
2021년 3월 28일 (일) 12:51 판
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 파일에 아래 내용을 추가한다.
<syntaxhighlight lang="cfg">
output_handler = Off
zlib.output_compression = On
zlib.output_handler = ob_gzhandler
</source>
이 설정은 서버 내의 모든 PHP 파일에 적용된다. php.ini나 .htaccess 파일을 사용할 수 없거나 특정한 PHP 파일에만 적용하고자 할 때는 ini_set() 함수를 사용한다.
<syntaxhighlight lang="php">
ini_set('output_handler') = 'Off';
ini_set('zlib.output_compression') = 'On';
ini_set('zlib.output_handler ') = 'ob_gzhandler';
</source>
ob_gzhander() 함수 사용
웹 서버의 압축 전송 모듈과 PHP의 zlib 모듈을 사용할 수 없다면 ob_gzhander() 함수를 사용한다.
<syntaxhighlight lang="php">
ob_start("ob_gzhandler");
</source>
여기에서 ob_gzhander() 함수는 ob_start() 함수의 콜백 함수로 사용되었다.