> 백엔드 개발 > PHP 튜토리얼 > PHP 압축 기능 구현: gzencode, gzdeflate 및 gzcompress_php 기술의 차이점

PHP 압축 기능 구현: gzencode, gzdeflate 및 gzcompress_php 기술의 차이점

WBOY
풀어 주다: 2016-05-16 19:59:09
원래의
1345명이 탐색했습니다.

•gzencode는 기본적으로 ZLIB_ENCODING_GZIP 인코딩을 사용하고 gzip 압축 형식을 사용합니다. 실제로 defalte 알고리즘을 사용하여 데이터를 압축한 다음 파일 헤더와 adler32 검사를 추가합니다
•gzdeflate는 기본적으로 ZLIB_ENCODING_RAW 인코딩 방식을 사용하며 deflate 데이터 압축 알고리즘을 사용합니다. 실제로 LZ77로 먼저 압축한 다음 Huffman 코딩으로 압축합니다
. •gzcompress; ZLIB_ENCODING_DEFLATE 인코딩은 기본적으로 zlib 압축 형식을 사용합니다. 실제로 deflate를 사용하여 데이터를 압축한 다음 zlib 헤더 및 CRC 검사를 추가합니다.

이 세 가지 기능의 비교는 본질적으로 deflate, zlib, gzip의 세 가지 압축 방법을 비교하는 것입니다.
성능 관점에서 보면 deflate가 gzip 및 zlib보다 낫습니다
압축 후 텍스트 파일의 기본 압축률 차원으로 판단하면 deflate가 zlib보다 좋고 gzip보다 낫습니다

이 세 가지 알고리즘 중 gzip과 zlib의 작성자는 Jean-Loup Gailly와 Mark Adler입니다.
이 두 가지 알고리즘과 그래픽 형식 png는 수축 알고리즘을 사용합니다.
deflate 알고리즘은 LZ77 알고리즘과 Huffman Coding을 모두 사용하는 무손실 데이터 압축 알고리즘입니다.
원래는 Phil Katz가 PKZIP 보관 도구 버전 2와 이후 RFC 1951 사양에서 정의했습니다.

deflate 알고리즘의 압축 및 압축 해제 구현 과정은 압축 라이브러리 zlib에서 확인할 수 있습니다.
PHP의 압축 구현은 deflate, zlib 및 gzip 압축 방법을 제공하는 함수 라이브러리인 zlib를 사용합니다.
위의 세 가지 함수를 사용했는데, 매개변수의 인코딩을 같은 값으로 변환하고 압축률을 같은 값으로 설정하면 결국 같은 함수가 호출되어 효과와 성능이 동일해집니다.

PHP의 zlib 구현은 ext/zlib 디렉토리에 확장으로 존재합니다. deflateInit2() deflate() deflateEnd()의 세 가지 함수가 협력하여 압축 기능을 완성하고, inflateInit2() inflate() inflateEnd()의 세 가지 함수가 협력하여 압축 해제 기능을 완성합니다. 압축은 궁극적으로 php_zlib_encode 함수를 통해 호출됩니다. 입력 문자열, 압축 비율 및 결과 출력 외에도 다양한 항목 함수 호출 매개변수가 인코딩입니다. deflateInit2의 네 번째 매개변수는 인코딩을 지정합니다. PHP는 세 가지 상수를 정의합니다:

코드 복사 코드는 다음과 같습니다.

#define PHP_ZLIB_ENCODING_RAW    -0xf   //deflate -15
#define PHP_ZLIB_ENCODING_GZIP           0x1f                                                                                        #define PHP_ZLIB_ENCODING_DEFLATE 0x0f // zlib 15

세 가지 함수 호출 프로세스 중에 다른 알고리즘을 사용하도록 인코딩을 직접 지정할 수 있습니다.

코드 복사 코드는 다음과 같습니다.
zlib: ZLIB_ENCODING_DEFLATE
gzip: ZLIB_ENCODING_GZIP
수축: ZLIB_ENCODING_RAW

이 세 가지 함수는 세 가지 알고리즘의 간단한 호출 방법으로 더 나은 이름으로 표시됩니다. 세 가지 함수는 동일한 인코딩을 지정하여 동일한 효과를 얻을 수 있으며, PHP도 범용 압축 함수로 zlib_encode 함수를 제공합니다.

참고:
http://shouce.jb51.net/gzip/rfc-deflate.html
http://www.gzip.org/zlib/rfc-deflate.html

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿