PHAR :: PHP를 JAVA의 JAR 처럼 써보자

JAVA에서 여러 파일을 하나의 파일로 만들어주는 JAR가 있습니다.

JAVA에서는 jar파일 하나만으로 javaw -jar 어쩌구.jar 하면 프로그램이 실행됩니다. ^^;;

PHP에서 사이트를 배포할 때 하나의 파일로 배포한다면 더 빨리 배포할 수 있고,
라이브러리 배포 및 유지관리 측면에서도 유리한 점이 많을 것이라 생각됩니다.
(물론 압축을 풀어보면 알수있지만;; 아무나 파일을 못만지게 할수도 있고;;)

그래서 이번에는 PHP를 하나의 파일로 패키징(?) 할수 있는 PHAR을 알아봅시다.

PHP에 대한 환경설정이 필요합니다.

php.ini 파일에서 다음 부분을 On에서 Off로 수정합니다.

phar.readonly = Off

수정 후에는 웹서버를 재시작 해주세요 -ㅅ-)

폴더 구조를 한번 살펴봅시다.
PHP를 이용해서 빌드(?) 환경을 만든다고 생각하시는게 이해 하시기 빠를 것 같습니다.
src 폴더에 빌드할 PHP파일들을 넣어둡니다. 결과물은 build에 떨어집니다.
build 폴더의 권한은 PHP가 쓰기 작업을 할 수 있도록 707로 만들어둡니다.
phar_folder

그…리..고…..

src 폴더에 예제로 사용할 파일들을 만듭니다.
이건 예제일 뿐이고 -_- 실제로 사용하실 파일들은 잘 준비해보세요..
common.php

<?php
class MyApp
{
	public function run($name) {
		echo "Welcome 안녕하세요 헬로우,";
		echo $name;
	}

}

파일을 인클루드 하는 부분을 자세히 보세욥.. 이렇게 phar 파일 속에 있는 파일을 개별로 지정 할 수 있습니다.
index.php

run("주선주선");

이젠 프로그램도 준비가 되었겠다… 빌드하는 스크립트를 만들어 봅시다.
한방에 되면 좋겠지만…. 한방에 안됩니다.
빌드 스크립트의 위치는 앞에서 보여드린 phar폴더에 위치 시켜주세요. (아니면 경로를 상대적으로 잡으시면 원하시는 위치에도..)
build.php

<?php

$srcRoot = "./src";
$buildRoot = "./build";
 
$phar = new Phar($buildRoot . "/myapp.phar", 
 FilesystemIterator::CURRENT_AS_FILEINFO | FilesystemIterator::KEY_AS_FILENAME, "myapp.phar");
$phar["index.php"] = file_get_contents($srcRoot . "/index.php");
$phar["common.php"] = file_get_contents($srcRoot . "/common.php");
$phar->setStub($phar->createDefaultStub("index.php"));

php 사이트에서 보고 온거라 뭐라고 말은 못하겠지만 -ㅅ-) ㅋㅋ 소스 파일을 가져다가 압축하는 프로세스 인것 같스빈다.
추가할 파일을 하나하나 잘 넣어줘야합니다. 파일에 경로가 포함되어있으면 경로까지도 ….

이제 빌드를 해봅시다. 콘솔에서 사용하셔도 되고 브라우저에서 하셔도 됩니다. (저는 콘솔에서)

$ php build.php 

그러면, build 폴더에 myapp.phar이 생성됩니다.

myapp.phar 파일을 실제로 구동해봅시다.

<?php
require "./build/myapp.phar";

(음.. 이게 답니다. -_- )

phar_run

여기까지 입니다.

즐거운 개발 되시길 ….

Leave a Reply

Your email address will not be published. Required fields are marked *