ProgramingTip

PHP에서 사용할 압축 방법은 무엇입니까?

bestdevel 2020. 11. 30. 19:22
반응형

PHP에서 사용할 압축 방법은 무엇입니까?


두 개의 PHP 펼쳐보기를 사용하여 강력한 대용량 데이터가 있습니다. 하나는 명령 줄 PHP 펼쳐를 사용하는 클라이언트 측이고 다른 하나는 Apache 뒤입니다. 나는 데이터를 서버 측에 게시하고 php : // 입력 스트림을 사용하여 웹 서버 측에 저장합니다. 메모리 제한에 도달하지 않도록 데이터는 각 POST 요청에 대해 500kB 청크로 분리됩니다. 이 모든 것이 잘 작동합니다.

이제 덜기 위해 데이터를 전송하기 전에 압축하고 다른 쪽에서 수신하면 압축을 풀고 싶습니다. 작업을 수행 할 수있는 세 쌍의 기능을 찾았지만 사용할 수있는 기능을 없습니다.

어떤 기능을 추천하고 그 이유는 무엇입니까?

업데이트 : 방금 zlib FAQ를 읽었습니다.

gzip 형식 ( gzencode)은 이름 및 마지막 수정 날짜와 같은 단일 파일에 마지막 디렉토리 정보를 유지하도록 설계되었습니다. 반면에 zlib 형식 ( gzcompress)은 인 메모리 및 통신 채널 애플리케이션 용으로 설계하는 더 간결한 헤더와 통합을 가지고 gzip보다 더 높은 무결성 검사를 사용합니다.


이 모든 것을 사용할 수 있습니다. 세 가지 사이에는 미묘한 차이가 있습니다.

  • gzencode ()gzip명령 줄 도구와 동일한 GZIP 파일 형식을 사용합니다. 이 파일 형식에는 사전에 메타 데이터가 포함 된 헤더, DEFLATE 압축 데이터, CRC32 및 길이 검사가 포함 된 바닥 글이 있습니다.
  • gzcompress () 는 ZLIB 형식을 사용합니다. 압축 형식, DEFLATE 압축 데이터 및 ADLER32 체크섬을 포함하는 바닥 글을 포토하는 데만 사용되는 더 짧은 헤더가 있습니다.
  • gzdeflate () 는 그 자체로 원시 DEFLATE 알고리즘을 사용하며, 이는 다른 두 형식의 기초입니다.

세 가지 모두 동일한 알고리즘을 사용합니다. gzencode()원본 파일 이름 및 기타 환경 데이터를 포함하는 기능을 추가합니다 (문자열을 압축하는 경우에 사용되지 않음). gzencode()보다 gzcompress()많은 수없는 전송 및 저장 방법을 사용할 수 있고, 체크섬을 추가합니다. 모든 것이 로컬에 저장되고 추가 메타 데이터가 필요하지 않을 gzdeflate()수도 있습니다. 이식성을 위해 다른 도구 중에서 (ZLIB 형식)보다 gzencode()더 잘 지원되는 (GZIP 형식)을 권장 gzcompress()합니다.

매우 짧은 부분을 압축 할 때 매우 짧은 입력의 경우 오버 헤드가 출력의 상당 부분을 차지할 수 있기 때문에 각 부분의 오버 헤드가 관련됩니다. 빈 패키지를 압축하여 측정 한 각 메소드의 오버 헤드는 다음과 가변적입니다.

  • gzencode('') = 20 바이트
  • gzcompress('') = 8 바이트
  • gzdeflate('') = 2 바이트

나는 PHP 전문가가 제기 한 질문에 답할 수 없지만 여기에서 많은 것이 진행되고 퍼지 정보가 제공되는 것입니다.

DEFLATE는 ZLIB, GZIP 등에서 사용하는 압축 알고리즘의 이름입니다. 이론적으로 GZIP은 대체 압축 알고리즘을 지원하지만 실제로는 없습니다.

"GZIP 알고리즘"과 같은 것은 없습니다. GZIP은 DEFLATE 알고리즘을 사용하고 압축 된 데이터 주위에 프레이밍 데이터를 배치합니다. GZIP을 사용하면 파일 이름, 파일 시간, CRC, 주석 등을 추가 할 수 있습니다. 이 메타 데이터는 선택 사항이며 많은 gzipper가 생략됩니다.

ZLIB는 좀 더 제한적인 다른 메타 데이터 세트와 특정 2 개의 바이트 헤더를 제외하고 유사합니다.

이 모두 IETF RFC 1950 , 19511952에 있습니다.

"gzip 알고리즘이 DEFLATE보다 더 잘 압축된다"는 것입니다. gzip 알고리즘이 없습니다. 그리고 GZIP 형식에 사용되는 알고리즘 은 DEFLATE 입니다.


모든 방법은 동일하며 그 차이는 대부분 헤더에 있습니다. 개인적으로 gzencode를 사용하면 gzip 유틸리티에 대한 명령 줄 호출과 동일한 출력이 생성됩니다.


C ++로 PHP에서 gzip 압축 파일의 압축을 풀어야했습니다. 나는 PHP gzencode와 그 대응 gzdecodeZ_NO_FLUSH메소드를 사용 하고 데이터 블록의 끝에서 인코딩을 적용 했습니다 Z_FINISH. Windows 비트와 메모리 레벨이 gzip 디플레이션 및 인플레이션을 허용하도록 변경되는 zlib 웹 사이트에 C의 예제 / 튜토리얼을 사용하여 PHP에서 gzip 파일을 압축 해제하고 압축 할 수 있습니다.

추가 :이 대부분의 사람들은 "압축 방법"이 무엇을 의미하는지 알지 못하는 것입니다.

참고 URL : https://stackoverflow.com/questions/621976/which-compression-method-to-use-in-php

반응형