Phar란 무엇인가?
Phar는 PHP Archive의 약자로, PHP 애플리케이션이나 라이브러리에 필요한 모든 리소스를 하나의 .phar 파일로 패키징하여 손쉽게 배포할 수 있도록 해주는 기술입니다. 생성된 phar 파일은 phar:// 스트림 래퍼(wrapper)를 통해 입출력(IO) 스트림으로 활용할 수 있습니다.
phar:// 래퍼에서 사용할 수 있는 컨텍스트 옵션은 크게 compress와 metadata 두 가지가 있으며, 각각의 특징을 자세히 살펴보겠습니다.
1. compress 옵션
PHP에서는 압축 형식을 지정하기 위해 다음과 같은 사전 정의 상수(predefined constants)를 제공합니다.
| 상수 | 값 | 설명 |
|---|---|---|
| Phar::NONE | 0x00000000 | 압축하지 않음 |
| Phar::COMPRESSED | 0x0000F000 | 파일 플래그 비트마스크(bitmask)로, 어떤 형태의 압축이라도 적용되어 있는지 확인할 때 사용 |
| Phar::GZ | 0x00001000 | zlib(gzip) 방식의 압축 적용 |
| Phar::BZ2 | 0x00002000 | bzip2 방식의 압축 적용 |
2. metadata 옵션
metadata 옵션은 phar 아카이브에 대한 설명 정보를 저장하는 데 사용됩니다. 해당 정보를 담고 있는 임의의 PHP 변수를 Phar::setMetadata() 메서드의 인수로 전달하면 됩니다. 이렇게 저장된 메타데이터는 나중에 아카이브의 성격이나 출처 등을 파악하는 데 유용하게 활용됩니다.
실전 예제
다음 예제는 Phar 파일을 생성할 때 컨텍스트 옵션을 설정하는 방법을 보여줍니다. gzip 압축을 적용하고, 사용자 정보를 메타데이터로 함께 저장하고 있습니다.
<?php
$context = stream_context_create(array('phar' =>
array('compress' => Phar::GZ)),
array('metadata' => array('user' => 'cellog')));
file_put_contents('phar://my.phar/somefile.php', 0, $context);
?>위 코드에서는 먼저 stream_context_create() 함수를 사용해 phar 컨텍스트를 생성합니다. compress 옵션에 Phar::GZ 상수를 지정하여 gzip 압축을 적용했으며, metadata 옵션에는 'user' 키를 가진 배열을 전달했습니다. 이후 file_put_contents() 함수를 통해 my.phar 아카이브 내부에 somefile.php 파일을 생성하면서 해당 컨텍스트를 적용합니다.
이처럼 Phar 컨텍스트 옵션을 활용하면 압축 설정과 메타데이터 관리를 유연하게 처리할 수 있어, PHP 애플리케이션의 배포 및 관리 작업을 더욱 효율적으로 수행할 수 있습니다.