2011-09-26 5 views
1

"전체 gz 파일을 배열로 읽어 들이기"라는 gzfile을 알 수있는 함수가 있습니다. bz2에서도 어떻게 할 수 있습니까? 감사!PHP로 배열로 bz2 파일을 읽는 법

+0

당신은 분명히 할 수 있습니까? 압축 해제 된 내용을 배열로 읽으려고합니까? 또는 압축 된 파일 자체 (표준 I/O를 사용하는 경우)? PHP에서 압축 해제를 수행해야합니까? bz2 알고리즘을 찾고/쓰거나 라이브러리 또는 명령 줄 도구를 사용할 수 있습니까? – Robert

+0

예 gzfile 함수와 마찬가지로 내용을 배열로 압축을 풀려고하는데 bz2 파일의 경우 몇 가지 아이디어가 필요한만큼 중요하지 않습니다. – Santiago

답변

2

내장 기능이 없습니다.

은 당신이 뭔가를 할 (몇몇 검사 등을 추가 할) 수 :

function bzfile($filename){ 
    $p = popen('bunzip2 -c ' . $filename, 'r'); 
    $a = array(); 
    while($a[] = fgets($p); 
    return $a; 
} 

이가 설치 bunzip2는 바이너리와 유닉스 운영 체제를 가정합니다. 그것은 당신의 파일에 buznip2를 실행합니다. -c 옵션은 "압축 해제 된 데이터를 디스크의 파일에 영향을주는 대신 stdout으로 보냅니다."출력은 파일 핸들처럼 동작하므로 행을 읽으려고 fgets 할 수 있습니다.

편집 : an extension , BZ2 기능을 내장 bzip2라는 확장 사용자 환경에서 사용할 수있는 경우 슬프게하지만, 더 bzfile는(), 당신은 같은 위의 다시 작성할 수 없었다 :.

function bzfile($file){ 
    $fp = bzopen('foo.bz2','r'); 
    $a = array(); 
    while ($a[] = fgets($fp)); 
    return $a; 
} 

이 필요하지 않습니다 유닉스 환경이나 바이너리 bunzip2는 설치되어 있어야합니다.

(주의 :이 모두는 bzipped 파일이 텍스트이고 바이너리 데이터를 포함하지 않는다고 가정합니다. 당신은 file() 대신에 대체물을 원했습니다.

+0

경고 : fgets()는 매개 변수 1이 될 것으로 기대합니다. 리소스, 부울 주어진 내가 먼저 내용을 추출하고 다음 함수를 실행해야합니다. – Santiago

관련 문제