문제

두 개의 PHP 스크립트를 사용하여 이동할 수있는 많은 양의 데이터가 있습니다. 하나는 명령 줄 PHP 스크립트를 사용하여 클라이언트 측면 및 APACHE 뒤에 있습니다. 데이터를 서버 측에 게시하고 php : // 입력 스트림을 사용하여 웹 서버 끝에 저장합니다. 메모리 제한에 도달하지 못하도록하려면 각 게시물 요청에 대해 데이터가 500KB 청크로 분리됩니다. 이 모든 것이 잘 작동합니다.

이제 대역폭을 저장하고 속도를 높이려면 다른 쪽 끝에서 수신되면 보내기 전에 데이터를 압축하고 싶습니다. 작업을 수행 할 수있는 3 쌍의 기능을 찾았지만 사용할 수있는 기능을 결정할 수 없습니다.

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

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

GZIP 형식 (gzencode)은 이름 및 마지막 수정 날짜와 같은 단일 파일에 대한 디렉토리 정보를 유지하도록 설계되었습니다. Zlib 형식 (gzcompress반면에 메모리 및 통신 채널 응용 프로그램을 위해 설계되었으며 훨씬 더 컴팩트 한 헤더 및 트레일러가 있으며 GZIP보다 더 빠른 무결성 검사를 사용합니다.

도움이 되었습니까?

해결책

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

  • gzencode () GZIP 파일 형식을 사용합니다. gzip 명령 줄 도구. 이 파일 형식에는 옵션 메타 데이터가 포함 된 헤더, 압축 데이터 디바트 및 CRC32 체크섬 및 길이 점검을 포함하는 바닥 글이 있습니다.
  • gzcompress () Zlib 형식을 사용합니다. 압축 형식을 식별하고 압축 데이터를 디플레이트하는 데 도움이되는 더 짧은 헤더가 있습니다.
  • gzdeflate () 원시 디플레이트 알고리즘을 자체적으로 사용하는데, 이는 다른 형식의 기초입니다.

세 가지 모두 후드 아래에서 동일한 알고리즘을 사용합니다. gzencode() 원본 파일 이름 및 기타 환경 데이터를 포함시키는 기능이 추가됩니다 (문자열 만 압축 할 때 사용하지 않음). gzencode() 그리고 gzcompress() 둘 다 체크섬을 추가하므로 아카이브의 무결성을 확인할 수있어 신뢰할 수없는 전송 및 저장 방법에 유용 할 수 있습니다. 모든 것이 로컬로 저장되고 추가 메타 데이터가 필요하지 않으면 gzdeflate() 충분할 것입니다. 이식성을 위해 권장합니다 gzencode() (GZIP 형식)은 아마도 더 잘 지원되는 것보다 gzcompress() (Zlib 형식) 다른 도구 중.

매우 짧은 문자열을 압축 할 때 각 방법의 오버 헤드는 매우 짧은 입력에 대해 오버 헤드가 출력의 상당 부분을 구성 할 수 있기 때문에 각 방법의 오버 헤드가 관련됩니다. 빈 문자열을 압축하여 측정 한 각 방법의 오버 헤드는 다음과 같습니다.

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

다른 팁

나는 PHP 전문가가 아니며 제기 된 질문에 대답 할 수는 없지만 여기에 많은 추측이 진행되고 퍼지 정보가 제공되는 것처럼 보입니다.

Deflate는 Zlib, GZIP 및 기타에서 사용하는 압축 알고리즘의 이름입니다. 이론적으로 GZIP는 대체 압축 알고리즘을 지원하지만 실제로는 아무것도 없습니다.

"GZIP 알고리즘"과 같은 것은 없습니다. GZIP는 Deflate 알고리즘을 사용하고 압축 데이터 주위에 프레임 데이터를 넣습니다. GZIP를 사용하면 파일 이름, 파일의 시간, CRC, 심지어 댓글과 같은 것을 추가 할 수 있습니다. 그러나이 메타 데이터는 선택 사항이며 많은 gzippers는 그것을 생략합니다.

Zlib은 다르고 제한된 메타 데이터 세트와 특정 2 바이트 헤더를 제외하고는 유사합니다.

이것은 모두 IETF RFC에 있습니다 1950, 1951, 그리고 1952.

"GZIP 알고리즘은 Deflate보다 더 잘 압축됩니다"라고 말하는 것은 말도 안됩니다. GZIP 알고리즘이 없습니다. GZIP 형식으로 사용 된 알고리즘 디플레이트입니다.

모든 방법은 본질적으로 동일하며, 이들 사이의 차이는 대부분 헤더에 있습니다. 개인적으로 나는 Gzencode를 사용하고, 이것은 GZIP 유틸리티에 대한 명령 선 호출과 동일한 출력을 생성합니다.

C ++로 PHP에서 GZIP 압축 파일을 압축해야했습니다. 나는 PHP를 알았다 gzencode 그리고 그 상대 gzdecode 사용 Z_NO_FLUSH 메소드 및 인코딩/디코딩 할 데이터 블록의 끝에 적용됩니다. Z_FINISH. Zlib 웹 사이트에 표시된 C의 예/튜토리얼은 Wind

엑스트라 :이 스레드의 대부분의 사람들이 "압축 방법"이 무엇을 의미하는지 전혀 모르는 것 같습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top