이 글은 주로 PHP의 압축 기능 구현을 소개합니다: gzencode, gzdeflate, gzcompress의 차이점은 도움이 필요한 친구들이 참고할 수 있습니다. 그것이 모두에게 도움이 되기를 바랍니다.
•gzencode는 기본적으로 ZLIB_ENCODING_GZIP 인코딩을 사용하고 gzip 압축 형식을 사용합니다. 실제로 defalte 알고리즘을 사용하여 데이터를 압축한 다음 파일 헤더와 adler32 확인을 추가합니다.
•gzdeflate는 기본적으로 ZLIB_ENCODING_RAW 인코딩을 사용하고 deflate 데이터 압축 알고리즘을 사용합니다. 실제로는 먼저 LZ77 압축을 사용한 다음 Huffman 코딩을 사용하여 압축합니다.
•gzcompress; 기본 인코딩은 ZLIB_ENCODING_DEFLATE이고 실제로 zlib 압축 형식을 사용하여 데이터를 압축한 다음 zlib 헤더와 파일을 압축합니다. CRC 검사
가 추가되었습니다. 비교는 기본적으로 deflate, zlib 및 gzip의 세 가지 압축 방법을 비교하는 것입니다.
성능 측면에서 보면 deflate가 gzip보다 좋고 zlib보다 좋음
텍스트 파일 압축 후 기본 압축률 측면에서 보면 deflate가 zlib보다 좋고 gzip보다 좋음
gzip과 zlib의 저자는 이 중 세 가지 알고리즘은 Jean-Loup Gailly와 Mark Adler입니다.
이 두 가지 알고리즘과 그래픽 형식 png는 수축 알고리즘을 사용합니다.
디플레이트 알고리즘은 LZ77 알고리즘과 허프만 코딩을 모두 사용하는 무손실 데이터 압축 알고리즘입니다.
원래 Phil Katz가 PKZIP 보관 도구의 두 번째 버전으로 정의했으며 나중에 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 //gzip 15 + 16 #define PHP_ZLIB_ENCODING_DEFLATE 0x0f // zlib 15
세 가지 함수는 호출 프로세스 중에 인코딩을 직접 지정하고 다른 알고리즘을 사용할 수 있습니다.
zlib: ZLIB_ENCODING_DEFLATE gzip: ZLIB_ENCODING_GZIP deflate: ZLIB_ENCODING_RAW
이 세 가지 함수는 간단합니다. 세 가지 알고리즘에 대한 호출 방법이 더 나은 이름으로 제공됩니다. 세 가지 함수는 동일한 인코딩을 지정하여 동일한 효과를 얻을 수 있으며, PHP도 범용 압축 함수로 zlib_encode 함수를 제공합니다. H 관련 권장 사항: pPhp 압축 문자열 여러 가지 방법
위 내용은 PHP 압축 함수 gzencode, gzdeflate 및 gzcompress 간의 차이점에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!