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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top