개요
PHP에서는 zlib://, bzip2://, zip:// 세 가지 스트림 래퍼(wrapper)를 통해 압축 파일을 손쉽게 다룰 수 있습니다. 이 래퍼들은 일반 파일처럼 표준 파일 시스템 함수와 함께 사용할 수 있어, 별도의 복잡한 처리 없이 압축 및 압축 해제 작업을 수행할 수 있다는 장점이 있습니다.
compress.zlib://
compress.zlib:// 래퍼는 gzopen() 함수와 유사한 방식으로 동작합니다. 다만 gzopen()과 달리 fread(), file_get_contents(), file_put_contents() 같은 파일 시스템 함수와 함께 자유롭게 사용할 수 있다는 점이 큰 차이입니다.
compress.bzip2://
compress.bzip2:// 래퍼는 bzopen() 함수와 유사하게 작동합니다. 특히 이 래퍼와 zlib 래퍼는 fopencookie 기능을 지원하지 않는 시스템 환경에서도 정상적으로 동작하기 때문에, 다양한 서버 환경에서 안정적으로 활용할 수 있습니다.
zip://
zip:// 래퍼는 ZIP 확장 모듈에 의해 등록됩니다. PHP 7.2.0 버전부터는 비밀번호로 암호화된 ZIP 아카이브도 지원하며, 스트림 컨텍스트의 password 옵션을 통해 비밀번호를 설정할 수 있습니다.
사용 예제
zlib으로 파일 압축하기
다음 코드는 compress.zlib:// 래퍼를 사용해 문자열을 gzip 형식으로 압축하여 저장하는 방법입니다.
<?php
file_put_contents("compress.zlib://test.txt.gz", "Hello World\r\n");
?>압축된 파일 읽기(압축 해제)
반대로 압축된 파일을 읽어올 때도 동일한 래퍼를 사용하면 자동으로 압축이 해제됩니다.
<?php
echo file_get_contents("compress.zlib://test.txt.gz");
?>copy() 함수로 압축 및 해제하기
PHP 내장 함수인 copy()를 활용하면 더욱 간단하게 zlib 압축 파일을 생성하고, 다시 원본으로 복원할 수 있습니다.
// file.txt를 gzip으로 압축
copy('file.txt', 'compress.zlib://' . 'file.txt.gz');
// 압축 파일을 다시 원본으로 복원
copy('compress.zlib://' . 'file.txt.gz', 'file.txt');마무리
PHP의 압축 스트림 래퍼를 활용하면 gzip, bzip2, zip 형식의 파일을 별도의 외부 명령어나 복잡한 라이브러리 없이 표준 파일 함수만으로 처리할 수 있습니다. 로그 파일 압축 저장, 대용량 데이터 전송 최적화 등 다양한 상황에서 유용하게 활용해 보시기 바랍니다.