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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top