2011-10-21 4 views
2

私のlibの1つでPharアーカイブを作成しようとしています。 libは、フォルダとサブフォルダにまとめられた一連のクラスです。 index.phpはありません。オートローダを起動するために呼び出すstatic 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

どのようにしてpharアーカイブをindex.phpファイルなしで作成できますか?実際には、アーカイブを自分のファイルのコンテナにするだけで、何も実行する必要はありません。

おかげで、すべての

+0

スタブを追加するコードを表示していないと思います。 {{$ phar-> getStub();}}を実行して、スタブコードを確認してください。 – cweiske

+0

前のコードはpharを作成するために使用するコード全体です。私は* stub()メソッドを使用しません。 – grunk

+0

アドバイスした通りにスタブコードがあるかどうかチェックしようとしましたか? – cweiske

答えて

1

まず、私はあなたがstopBuffering()startBuffering()にあると思います。そして、私はbuildFromDirectoryがこれをあなたのために内部的に行うと思うかもしれません。 アーカイブを「シールする」ためにstopBuffering()を実行する必要はありません。その準備が整いました。

だから、第二:あなたはこのように(あなたのコードの暗黙的にに使用されている)defaultStubを見ることができます:

そのはlittly少し不可解

$phar->setDefaultStub(); 
var_dump($phar->getStub()); 
が、あなたはそれを把握します。 pharストリームラッパーのサポートをチェックし(5.3項)、そうでない場合は、内容を一時ファイルに抽出して、 Phar::START定数ファイルを実行します。デフォルトでは "index.php"です。もちろん、 Phar::interceptFileFuncs()を含み、phar workingを "magic"にするインクルードパスを設定します。しかし、あなたの質問はあなたのライブラリのアーカイブが必要なように聞こえます。だからあなたは "PharData"クラスを使う方が良いです。まだ試したことはありませんが、ドキュメンテーションにはそう言われています。

関連する問題