>  기사  >  백엔드 개발  >  PHP 압축 기능 구현: gzencode, gzdeflate 및 gzcompress 비교

PHP 압축 기능 구현: gzencode, gzdeflate 및 gzcompress 비교

高洛峰
高洛峰원래의
2016-10-17 10:55:171252검색

gzencode는 기본적으로 ZLIB_ENCODING_GZIP 인코딩을 사용하고 gzip 압축 형식을 사용합니다. 실제로 defalte 알고리즘을 사용하여 데이터를 압축한 다음 파일 헤더와 adler32 확인을 추가합니다.

gzdeflate는 기본적으로 ZLIB_ENCODING_RAW 인코딩을 사용하고 deflate를 사용합니다. 데이터 압축 알고리즘은 실제로 LZ77 압축을 사용한 다음 Huffman 코딩을 사용하여 압축합니다.

gzcompress; 기본적으로 ZLIB_ENCODING_DEFLATE 인코딩이 사용되며 실제로 데이터를 압축하는 데 사용됩니다. 그런 다음 zlib 헤더와 CRC 수정이 추가됩니다.

이 세 가지 기능의 비교는 본질적으로 deflate, zlib 및 gzip의 세 가지 압축 방법을 비교하는 것입니다.

성능 측면에서 보면 deflate가 gzip보다 우수하고 zlib보다 우수함

압축 후 텍스트 파일의 기본 압축률 측면에서 보면 deflate가 zlib보다 우수하고 gzip보다 우수함

이 세 가지 알고리즘 중 gzip과 zlib의 작성자는 Jean-Loup Gailly와 Mark Adler입니다.

이 두 알고리즘에서 사용하는 압축 알고리즘과 png 그래픽 형식은 모두 deflate 알고리즘입니다.

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는 세 가지 상수를 정의합니다: + 16#define PHP_ZLIB_ENCODING_DEFLATE 0x0f // zlib 15

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

zlib: ZLIB_ENCODING_DEFLATE gzip: ZLIB_ENCODING_GZIPdeflate: ZLIB_ENCODING_RAW

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.