S'il vous plaît expliquer comment créer des talons PHP Phar
Question
Je suis en train de créer une application PHP CLI très simple qui peut être exécuté en tant que phar fichier à partir de la ligne de commande:
# php myProject.phar
est ce que je l'ai essayé jusqu'à présent:
Mon projet
Mon projet est dans un répertoire appelé MyProject
et il a ces deux fichiers dans ce:
|-- createPhar.php
`-- bootstrap.php
bootstrap.php
Le fichier contient bootstrap.php
ceci:
<?php
print phpversion() . PHP_EOL;
print 'i am some script' . PHP_EOL;
Quand je lance ce script de ma ligne de commande Ubuntu:
# cd MyProject
# php bootstrap.php
je reçois la sortie suivante:
5.3.2-1ubuntu4.9
i am some script
createPhar.php
Le fichier createPhar.php vise à transformer le projet en archives Phar. Il ressemble à ceci:
<?php
$phar = new Phar('MyProject.phar');
$phar->addFile('bootstrap.php');
$phar->setStub( $phar->createDefaultStub('bootstrap.php') );
Quand je lance ce script ...
# php createPhar.php
... un nouveau fichier appelé MyProject.phar
est créé dans le répertoire de mon projet.
|-- bootstrap.php
|-- createPhar.php
`-- MyProject.phar
Maintenant, voici le problème
Quand je lance le fichier phar ...
# php MyProject.phar
... je me attends à même la même sortie que je suis quand quand je courais le script bootstrap.php
.
Au lieu de cela, je ne vois rien. Pas de sortie du tout. Cela implique que mon script bootstrap.php
n'est pas inclus par le talon par défaut qui a été créé par $phar->createDefaultStub('bootstrap.php')
Je pense que je comprends mal comment Phars et leurs talons sont créés. Pourriez-vous, s'il vous plaît, expliquer où je suis allé mal.
La solution
Pour répondre à ma propre question.
La méthode décrite dans ma question, ci-dessus, est une bonne façon de créer un stub phar / phar.
La raison pour laquelle cela n'a pas fonctionné pour moi et a fait travail pour Mario (voir son commentaire ci-dessous la question), est parce que j'avais Suhosin installé et nécessaire pour modifier les paramètres.
fixe en utilisant la technique décrite ici :
Pour résoudre, mettre:
suhosin.executor.include.whitelist = "phar"
dans /etc/php5/cli/php.ini
Autres conseils
vous pouvez aussi le faire comme ceci:
bootstrap.php;
<?php
function go() {
print phpversion() . PHP_EOL;
print 'i am some script' . PHP_EOL;
}
alors:
php -r « require 'Phar: //Myproject.phar'; go (); "
ou n'ont pas une fonction et il exécutera tout ce que vous avez des commandes là-bas, mais en général vous auriez des fonctions ou des fichiers de classe dans le Phar.