작은숲:위키노트/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> 파일에 아래 내용을 추가한다.
<source lang="cfg">
<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> 함수를 사용한다.
<source lang="php">
<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> 함수를 사용한다.
<source lang="php">
<syntaxhighlight lang="php">
ob_start("ob_gzhandler");
ob_start("ob_gzhandler");
</source>
</source>

2021년 3월 28일 (일) 12:51 판

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 파일에 아래 내용을 추가한다. <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() 함수의 콜백 함수로 사용되었다.

같이 보기

참고