•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는 세 가지 상수를 정의합니다:
세 가지 함수 호출 프로세스 중에 다른 알고리즘을 사용하도록 인코딩을 직접 지정할 수 있습니다.
참고:
http://shouce.jb51.net/gzip/rfc-deflate.html
http://www.gzip.org/zlib/rfc-deflate.html