まず最初に: 私の Phars は実行されます。私は少し遊んでいて、次のシナリオがあります。
- アプリケーション用の Phar (不規則なものはありません) (application-phar)
- たとえばライブラリ用の 2 番目の phar。(lib-phar)
lib-phar を application-phar に入れたいと思います。application-phar のみを必要とします。application-phar からのブートストラップ (スタブ) が lib-phar からブートストラップをロードするようにします。
これは私が思いついた最高の紹介リソースです: http://www.slideboom.com/presentations/26182/PHP-5.3-Part-3---Introducing-PHAR
私は次のものを持っています:
lib-phar
$innerPharFile = $this->newFile('lib.phar');
$innerPhar = new Phar((string) $innerPharFile);
$innerPhar->addFromString('index.php', '<?php echo " inner index loaded"; ?>');
$innerPhar->setStub(file_get_contents('inner_stub.php'));
内部スタブ
<?php
echo " inner stub loaded\n\n";
// Here is the problem: how do i execute index.php from inner, here?
var_dump(Phar::running (TRUE));
echo "\n";
__HALT_COMPILER();
?>
アプリケーションファー
$pharFile = $this->newFile('application.phar');
$phar = new Phar((string) $pharFile);
$phar->addFile($innerPharFile,'lib.phar');
$phar->addFromString('index.php', '<?php echo "outer index loaded"; ?>');
$phar->setStub(file_get_contents('outer-stub.php'));
外部スタブ
<?php
echo "outer stub loaded\n";
$inner_phar = 'phar://'.__FILE__.'/lib.phar';
require $inner_phar;
require 'phar://'.__FILE__.'/index.php';
__HALT_COMPILER();
?>
主要
php -f 'application.phar'
出力:
outer stub loaded
inner stub loaded
string(xx) "phar://full/path/to/application.phar"
outer index loaded
とても長いですが... 内側の index.php を実行するにはどうすればよいですか? 問題は、非常に紛らわしいことをしたいということだと思います:
require 'phar://phar://full/path/to/application.phar/lib.phar';
これは読み取り可能な形式です: :
require 'phar://
phar://full/path/to/application.phar
/lib.phar';
私の lib.phar は application.phar にあるためです。だから私はラッパーの周りにラッパーが必要だと思います。したがって、PHAR-Extension はこのために作成されていない可能性があります。ご覧のとおり、2 番目のスタブが呼び出されますが、魔法の__FILE__
定数 (およびPhar::running(TRUE|FALSE)
ここでは間違って設定されています。
あなたはなにか考えはありますか?または、同様のセットアップを行いましたか?
もちろん、私は代替案を知っています:
- lib + アプリケーションに 1 つのスタブと 1 つの phar を使用する
- lib.phar を一時的な場所に解凍し、そこから Phar::load() を使用してそれを要求します。
この入れ子のセットアップについて考えるのが本当に好きです。たぶん、あなたは別の素晴らしいアイデアを思いつきましたか?
よろしくフィリップ