обо всем по порядку: мои фарс бегут.Я немного поиграюсь, и у меня есть следующий сценарий:
- Phar для приложения (ничего необычного с ним) (application-phar)
- второй phar,например для библиотеки.(lib-phar)
Я бы хотел поместить lib-phar в application-phar.и требуют только приложение-фар.Так что начальный загрузчик (заглушка) из application-phar загружает начальный загрузчик из lib-phar.
Это лучший вводный ресурс, который я придумал: http://www.slideboom.com/presentations/26182/PHP-5.3-Part-3---Introducing-PHAR
Iиметь следующее:
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();
?>
application-phar
$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();
?>
main
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 находится в приложении IN.фармацевтическийПоэтому я думаю, что мне понадобится обертка вокруг обертки.Так что, возможно, расширение PHAR не сделано для этого.Как мы видим, вторая заглушка называется, но магическая __FILE__
константа (а также Phar::running(TRUE|FALSE)
установлена здесь неправильно.
У вас есть какие-нибудь идеи? Или сделали подобную настройку?
Конечно, я знаю альтернативы:
- использовать одну заглушку и один phar для приложения lib +
- распаковать lib.phar во временное место и потребовать его оттуда с Phar:: load ()
Мне действительно нравится думать об этой установке вложенности. Может быть, у вас есть другая отличная идея?
С наилучшими пожеланиями Филипп