2014-07-21 4 views
0

PHP를 사용하여 파일을 만들고 압축하려고합니다. 유닉스에서 실행되는 gzip과 같은 압축 수준/헤더/등과 어떻게 일치합니까?php gzip match unix gzip

PHP를 사용 UNIX 명령 라인 GZIP을 사용

ls -l 
total 8 
-rw-rw-r-- 1 owner owner 486 Jul 21 17:05 file.xml.gz 

:

은 여기 압축 레벨로 0-9 시도

$zip = gzencode($xml,2); 

PHP에서

ls -l 
total 8 
    -rw-rw-r-- 1 owner owner 479 Jul 21 17:05 file.xml.gz 

제가 가지고 시도해도

$zip = gzencode($xml,x,FORCE_DEFLATE) 

다시 여기서 x는 0-9

내 문제는 이것이다이다 :

내가 그것으로 재미 일을, gzip으로 압축 된 파일을 소요 그것을 압축을 풀고 않는 제 3 자 공급 업체가 있습니다. 내가 실행중인 문제는 내가 PHP를 사용하여 "나는 file.xm.gz를 파싱 할 수 없다"라는 오류가 발생하는데, cli에서 gzip을 사용할 때 문제없이 작동합니다. 나는 제 3자가 무엇을하고 있는지, 왜 실패했는지에 대한 어떤 비전도 가지고 있지 않습니다. 그것은 캐리지 리턴이나 공백 또는 XML의 무언가 일 수 있습니까? 대답하기 어려운 질문을 안다. 내 PHP XML 스 니펫을 heres.

$xml ='<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
       <localRoutes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
         '; 
    $xml.='<route> 
      <user type="string">' . $mac . '</user> 
      '; 
    $xml.='<next type="regex">!^(.*$)!sip:@' . $ip . "</next> 
      </route> 
      "; 
     $xml .= '</localRoutes>'; 

답변

0

압축 된 데이터는 동일합니다. 누락 된 부분은 파일의 원래 이름을 나타내는 헤더의 필드입니다 (예 : 여기 file.xml). 이 필드는 gzip 유틸리티에 의해 생성되지만 gzencode() PHP 함수는 사용할 원본 파일 이름이 없으므로이 필드를 쓰지 않습니다.

PHP가 zlib 확장을 사용하여이 필드를 생성하도록하는 방법을 모르겠습니다. 그러나 그것의 부재는 어떤 문제를 일으키지 않을 것입니다.

0
  1. 수 없습니다.
  2. 필요하지 않습니다.

먼저 gzip과 zlib (다른 PHP에서 사용하는 것)는 압축 알고리즘이 다르므로 충분한 데이터의 경우 동일한 압축 수준에서도 같은 압축 데이터를 생성하지 않습니다.

둘째, @duskwuff에서 언급했듯이 PHP에서 만든 gzip 헤더를 풀어서 작성하지 않는 한 동일한 gzip 헤더를 복제 할 수 없습니다. 헤더의 수정 날짜는 다릅니다. 당신이 그것을하고있는 방법, 사람은 파일 이름을 가지고있을 것이다. 파일 이름을 저장하지 않으려면 -n으로 gzip을 호출 할 수 있지만.

셋째, 결과를 동일하게 만들려는 이유가 없습니다. 중요한 점은 두 가지가 같은 것을 감압하는 것입니다. 그들이 할 것입니다.

+0

첫 번째 : 흠? 'gzencode()'는 gzip과 마찬가지로 RFC1952 호환 출력을 생성합니다. 같은 압축 알고리즘과 모든 것. – duskwuff

+0

준수 함, 예. 똑같아. 동일한 데이터에 대해 가능한 여러 가지 가능한 압축이 있습니다. –