2011-10-21 5 views
2

나는 나의 lib 중 하나를 가지고 Phar 아카이브를 만들려고한다. lib는 폴더와 하위 폴더로 구성된 여러 클래스입니다. 여기에 index.php가 없으며 자동 로더를 시작하기 위해 호출 할 정적 Config 클래스 만 있습니다. 내가 이런 식의 Phar 사용하기 위해 노력하고있어 그 후색인없이 Phar 아카이브를 만드는 방법

$phar = new Phar(__DIR__ . '/lis.phar',0,'lib.phar'); 
$phar->buildFromDirectory(__DIR__ . '/class','/\.php$'); 
$phar->stopBuffering(); 

:

어쨌든, 나는이 같은 아카이브 구축

require('lib.phar'); 
Config::register(); // Config is in the phar 

을하지만 난 다음 오류 얻을 :

Warning: include(phar://D:\wamp\www_test\phar\lib.phar/index.php) [function.include]: failed to open stream: phar error: "index.php" is not a file in phar "D:/wamp/www/_test/phar/lib.phar" in D:\wamp\www_test\phar\lib.phar on line 9

어떻게 내부에 index.php 파일이없는 phar 아카이브를 만들 수 있습니까? 사실 나는 아카이브가 내 파일의 컨테이너가 될 필요가 있으며 자동 실행이 필요하지 않습니다.

감사

모든
+0

당신이 스텁을 추가하는 코드를 보여주지 않았다고 생각합니다. {{$ phar-> getStub();}}를 실행하여 스텁 코드를 봅니다. – cweiske

+0

이전 코드는 phar를 생성하는 데 사용하는 전체 코드입니다. 어떤 스텁() 메서드도 사용하지 않습니다. – grunk

+0

내가 조언 한대로 스텁 코드가 있는지 확인하려고 했습니까? – cweiske

답변

1

첫째, 난 당신이 stopBuffering() 전에 startBuffering()에 있다고 생각. 그리고 내 생각에 buildFromDirectory이 내부적으로 수행합니다. 아카이브를 "봉인"하기 위해 stopBuffering()을 수행 할 필요는 없습니다. 그 준비가되어 있습니다.

그래서 두 번째 :이 같은 (코드의 implicity에 사용되는)를 defaultStub 볼 수 있습니다 :

$phar->setDefaultStub(); 
var_dump($phar->getStub()); 

그에게 littly 비트 비밀, 그러나 당신이 그것을 알아낼 것입니다. phar 스트림 래퍼 지원 (5.3 절)을 확인하고, 그렇지 않으면 임시 파일에 내용을 추출한 다음 Phar::START 상수 파일을 실행합니다.이 파일은 기본적으로 "index.php"입니다. 그리고 물론 Phar::interceptFileFuncs()을 가지고 phar working "magic"을 만드는 포함 경로를 설정합니다. 하지만 귀하의 질문에 대한 귀하의 libs에 대한 아카이브가 필요해 소리. 따라서 "PharData"클래스를 사용하는 것이 더 좋습니다. 아직 시도하지 않았지만 문서에 그렇게 쓰여 있습니다.