Das Wichtigste zuerst: Meine Phars laufen. Ich spiele ein wenig herum und habe das folgende Szenario:
- ein Phar für die Bewerbung (nichts Unregelmäßiges dabei) (application-phar)
- einen zweiten Phar, zum Beispiel für eine Bibliothek. (lib-phar)
Ich möchte die lib-phar in die application-phar einbinden. und nur die application-phar benötigen. So dass die Bootstrap (Stub) aus der Anwendung-Phar lädt die Bootstrap aus der Lib-Phar.
Dies ist die beste einführende Ressource, die mir eingefallen ist: http://www.slideboom.com/presentations/26182/PHP-5.3-Part-3---Introducing-PHAR
Ich habe die folgenden:
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'));
Innenstutzen
<?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();
?>
anwendung-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'));
Außenstutzen
<?php
echo "outer stub loaded\n";
$inner_phar = 'phar://'.__FILE__.'/lib.phar';
require $inner_phar;
require 'phar://'.__FILE__.'/index.php';
__HALT_COMPILER();
?>
Haupt
php -f 'application.phar'
Ausgänge:
outer stub loaded
inner stub loaded
string(xx) "phar://full/path/to/application.phar"
outer index loaded
So lange, so gut, aber... Wie führe ich die innere index.php aus? Ich denke, das Problem ist, dass ich etwas sehr verwirrend dome möchte:
require 'phar://phar://full/path/to/application.phar/lib.phar';
die in lesbarer Form vorliegt: :
require 'phar://
phar://full/path/to/application.phar
/lib.phar';
denn meine lib.phar ist IN application.phar. Ich denke also, dass ich einen Wrapper um den Wrapper herum brauchen würde. Vielleicht ist die PHAR-Erweiterung also nicht dafür gemacht. Wie wir sehen, wird der zweite Stub aufgerufen, aber die magische __FILE__
konstant (ebenso wie Phar::running(TRUE|FALSE)
ist hier falsch eingestellt.
Haben Sie eine Idee? Oder einen ähnlichen Aufbau gemacht?
Natürlich kenne ich die Alternativen:
- ein Stub und ein Phar für Lib + Anwendung verwenden
- Dekomprimieren Sie die lib.phar an einen temporären Ort und fordern Sie sie von dort mit Phar::load() an.
Ich denke wirklich gerne über diese Verschachtelung nach. Vielleicht haben Sie eine andere tolle Idee?
Mit freundlichen Grüßen Philipp