Bitte erläutern Sie, wie Sie PHP -Phar -Stubs erstellen
Frage
Ich versuche eine sehr einfache PHP -CLI -Anwendung zu erstellen, die als ausgeführt werden kann Phar Datei aus der Befehlszeile:
# php myProject.phar
Das habe ich bisher versucht:
Mein Projekt
Mein Projekt befindet sich in einem Verzeichnis namens namens MyProject
Und es enthält diese beiden Dateien:
|-- createPhar.php
`-- bootstrap.php
Bootstrap.php
Das bootstrap.php
Datei enthält dies:
<?php
print phpversion() . PHP_EOL;
print 'i am some script' . PHP_EOL;
Wenn ich dieses Skript aus meiner Ubuntu -Befehlszeile ausführe:
# cd MyProject
# php bootstrap.php
Ich bekomme die folgende Ausgabe:
5.3.2-1ubuntu4.9
i am some script
Createphar.php
Die Datei createphar.php soll das Projekt in das Phar -Archiv verwandeln. Es sieht aus wie das:
<?php
$phar = new Phar('MyProject.phar');
$phar->addFile('bootstrap.php');
$phar->setStub( $phar->createDefaultStub('bootstrap.php') );
Wenn ich das Skript ausführe ...
# php createPhar.php
... eine neue Datei aufgerufen MyProject.phar
wird im Verzeichnis meines Projekts erstellt.
|-- bootstrap.php
|-- createPhar.php
`-- MyProject.phar
Hier ist das Problem
Wenn ich die PHAR -Datei ausführe ...
# php MyProject.phar
... Ich gehe davon aus bootstrap.php
Skript.
Stattdessen sehe ich nichts. Überhaupt keine Ausgabe. Dies impliziert, dass mein bootstrap.php
Das Skript wird nicht durch den Standardstub aufgenommen, der von erstellt wurde von $phar->createDefaultStub('bootstrap.php')
Ich denke, ich verstehre Missverständnis, wie Phars und ihre Stummel geschaffen werden. Könnten Sie bitte erklären, wo ich falsch gelaufen bin?
Lösung
Meine eigene Frage beantworten.
Die in meiner Frage beschriebene Methode ist eine korrekte Möglichkeit, einen Phar / Phar -Stub zu erstellen.
Der Grund, warum es für mich nicht funktioniert hat und nicht tat Arbeit für Mario (siehe seinen Kommentar unten in der Frage), weil ich Suhosin installiert hatte und die Einstellungen optimieren musste.
Mit dem Technik hier skizziert:
Zu reparieren, setzen:
suhosin.executor.include.whitelist = "Phar"
in /etc/php5/cli/php.ini
Andere Tipps
Sie könnten es auch so machen:
Bootstrap.php;
<?php
function go() {
print phpversion() . PHP_EOL;
print 'i am some script' . PHP_EOL;
}
dann:
php -r "erfordern 'phar: //myproject.phar'; go ();"
Oder haben keine Funktion und es wird alle Befehle ausführen, die Sie dort haben, aber normalerweise haben Sie einige Funktionen oder Klassendateien im Phar.