2009-03-07 4 views
51

두 개의 PHP 스크립트를 사용하여 이동할 데이터가 많습니다. 하나는 클라이언트 측에서 명령 줄 PHP 스크립트를 사용하고 다른 하나는 Apache 뒤에 있습니다. 나는 서버 측에 데이터를 POST하고 php : // 입력 스트림을 사용하여 웹 서버 측에 저장한다. 메모리 제한에 도달하지 못하도록 각 POST 요청마다 데이터가 500kB 청크로 분리됩니다. 이 모든게 잘 작동합니다.PHP에서 사용할 압축 방법은 무엇입니까?

이제 대역폭을 절약하고 속도를 높이기 위해 데이터를 보내고 압축하기 전에 데이터를 압축하여 다른 쪽에서 수신하려고합니다. 나는 그 일을 할 수있는 기능 3 쌍을 발견,하지만 난 하나를 사용할 것인지 결정할 수 없습니다 :

어떤 쌍 기능의 당신은 추천하고 왜?

UPDATE : 난 그냥 ZLIB FAQ를 읽어

gzip으로 형식 ( gzencode)가 같은 이름과 마지막으로 수정 한 날짜와 같은 단일 파일에 대한 디렉토리 정보를 유지하도록 설계되었습니다

. 반면에 zlib 형식 (gzcompress)은 메모리 및 통신 채널 응용 프로그램 용으로 설계되었으며 훨씬 더 컴팩트 한 헤더와 트레일러가 있으며 gzip보다 빠른 무결성 검사를 사용합니다.

+1

'gzdecode()'가 PHP에서 아직 사용 가능하지 않은 것 같습니다. 그러므로 피하십시오. –

+1

'gzdecode()'는 PHP 5.4.0 이상에서만 정의됩니다 : http://php.net/manual/en/function.gzdecode.php –

답변

62

이들 모두를 사용할 수 있습니다.

  • gzencode()는, GZIP 파일 형식의 gzip 명령 줄 도구와 동일하게 사용 세 사이의 미묘한 차이가 있습니다. 이 파일 형식에는 선택적 메타 데이터, DEFLATE 압축 데이터 및 CRC32 체크섬 및 길이 확인을 포함하는 바닥 글이 들어있는 헤더가 있습니다.
  • gzcompress()은 ZLIB 형식을 사용합니다. 압축 형식을 식별하는 데만 사용되는 짧은 머리글, 압축 된 데이터를 DEFLATE, ADLER32 체크섬이 포함 된 바닥 글이 있습니다.
  • gzdeflate()은 자체 DEFLATE 알고리즘을 사용합니다.이 알고리즘은 다른 두 형식의 기본입니다.

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

+3

거의 틀림 없습니다. 나는 조금 연구했고, gzencode가 어떤 헤더 데이터와도 다른 것으로 보이지 않는다. 단지 다른 헤더 데이터를 가지고있다. –

+2

@Milan gzcompress는 헤더 데이터가 없어도 헤더 데이터가 다릅니다. – thomasrutter

4

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

39

저는 PHP 전문가가 아니며 질문에 답변 할 수 없지만 여기서 추측을 많이하고 퍼지 정보를 제공하는 것처럼 보입니다.

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

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

ZLIB는 다른 제한된 메타 데이터 세트와 특정 2 바이트 헤더를 제외하면 비슷합니다.

이것은 모두 IETF RFC 1950, 19511952입니다.

"gzip 알고리즘이 DEFLATE보다 압축률이 높다"는 말도 안됩니다. gzip 알고리즘은 없습니다. 그리고 GZIP 포맷 에 사용 된 알고리즘은 DEFLATE입니다.

+0

해명 해 주셔서 감사합니다. 이 독서를하기 전까지는 아무 것도 이해할 수 없었습니다 ... – rvighne