Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP로 gzip 파일의 압축을 푸는 방법 완벽 가이드

PHP에서는 gzread 함수를 활용하여 gzip으로 압축된 파일을 손쉽게 압축 해제할 수 있습니다. 아래 예제 코드를 통해 그 방법을 자세히 살펴보겠습니다.

코드 예제

$file_name = 'name_of/.dump.gz';
$buffer_size = 4096; // 한 번에 읽어올 바이트 크기 (여기서는 4KB)
$out_file_name = str_replace('.gz', '', $file_name);
$file = gzopen($file_name, 'rb'); // 파일을 바이너리 모드로 열기
$out_file = fopen($out_file_name, 'wb');
// 입력 파일의 끝에 도달할 때까지 반복
while (!gzeof($file)) {
    fwrite($out_file, gzread($file, $buffer_size)); // 버퍼 크기만큼 바이트를 읽음
}
fclose($out_file); // 작업이 끝나면 파일 닫기
gzclose($file);

실행 결과

위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

gzip 파일의 압축을 풀어 추출된 비압축 데이터

코드 동작 원리

먼저 압축 파일의 경로는 'file_name'이라는 변수에 저장됩니다. 한 번에 읽어올 바이트 크기는 고정되어 있으며, 'buffer_size' 변수에 할당됩니다. 출력 파일에는 .gz 확장자가 붙지 않아야 하므로, str_replace 함수를 사용해 확장자를 제거한 파일명이 'out_file_name' 변수에 저장됩니다.

이후 'out_file_name'은 쓰기 바이너리 모드('wb')로 열려, 압축 해제된 내용을 기록할 준비를 합니다. 동시에 'file_name'은 읽기 모드('rb')로 열리고, gzread 함수를 통해 내용을 읽어 들인 뒤 이를 'out_file'에 기록합니다.

while 반복문은 gzeof 함수를 통해 파일의 끝(EOF)에 도달했는지 확인하며, 전체 내용이 모두 읽힐 때까지 버퍼 단위로 데이터를 처리합니다. 마지막으로 모든 작업이 완료되면 fclosegzclose 함수를 호출하여 열려 있던 파일 리소스를 안전하게 닫아줍니다.

이러한 스트림 기반 처리 방식은 대용량 gzip 파일도 메모리에 한 번에 로드하지 않고 효율적으로 압축 해제할 수 있다는 장점이 있습니다.