首先要做的事情是:我的 Phars 确实在运行。我正在玩一点,我有以下场景:
- 应用程序的 Phar(没有什么不规则的)(application-phar)
- 第二个 phar,例如用于图书馆。(lib-phar)
我想将 lib-phar 放入 application-phar。并且只需要应用程序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();
?>
应用程序pha
$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 不是为此而设计的。正如我们所见,调用了第二个存根,但是魔术__FILE__
常数(以及Phar::running(TRUE|FALSE)
此处设置错误。
你有什么想法?或者做了类似的设置?
我当然知道替代方案:
- 对 lib + 应用程序使用一个存根和一个 phar
- 将 lib.phar 解压缩到一个临时位置,并使用 Phar::load() 从那里获取它
我真的很想考虑这种嵌套设置。也许你有另一个好主意?
最好的问候菲利普