Pregunta

Estoy tratando de crear una aplicación PHP CLI muy simple que se pueda ejecutar como un phar Archivo desde la línea de comando:

# php myProject.phar

Esto es lo que he probado hasta ahora:

Mi proyecto

Mi proyecto está en un directorio llamado MyProject Y tiene estos dos archivos:

 |-- createPhar.php
 `-- bootstrap.php

bootstrap.php

los bootstrap.php El archivo contiene esto:

<?php
print phpversion() . PHP_EOL;
print 'i am some script' . PHP_EOL;

Cuando ejecuto este script desde mi línea de comando Ubuntu:

# cd MyProject 
# php bootstrap.php

Obtengo la siguiente salida:

5.3.2-1ubuntu4.9
i am some script

createPhar.php

El archivo createPhar.php está destinado a convertir el proyecto en PHAR Archive. Se parece a esto:

<?php    
$phar = new Phar('MyProject.phar');
$phar->addFile('bootstrap.php');
$phar->setStub( $phar->createDefaultStub('bootstrap.php') );

Cuando ejecuto ese guión ...

# php createPhar.php

... un nuevo archivo llamado MyProject.phar se crea en el directorio de mi proyecto.

|-- bootstrap.php
|-- createPhar.php
`-- MyProject.phar

Ahora aquí está el problema

Cuando ejecuto el archivo PHAR ...

# php MyProject.phar 

... Espero ver la misma salida que obtuve cuando ejecuté el bootstrap.php guion.

En cambio no veo nada. No hay salida en absoluto. Esto implica que mi bootstrap.php El script no está siendo incluido por el trozo predeterminado creado por $phar->createDefaultStub('bootstrap.php')

Creo que estoy malinterpretando cómo se crean los fantasmas y sus trozos. ¿Podrías, por favor, explicar dónde me he equivocado?

¿Fue útil?

Solución

Para responder mi propia pregunta.

El método descrito en mi pregunta, arriba, es una forma correcta de crear un trozo PHAR / PHAR.

La razón por la que no funcionó para mí y hizo El trabajo para Mario (vea su comentario a continuación la pregunta), es porque tenía a Suhosin instalado y necesitaba ajustar la configuración.

Arreglado usando el técnica se describe aquí:

Para arreglar, poner:

suhosin.executor.include.whitelist = "Phar"

en /etc/php5/cli/php.ini

Otros consejos

También podrías hacerlo así:

bootstrap.php;

<?php
function go() {
    print phpversion() . PHP_EOL;
    print 'i am some script' . PHP_EOL;
}

después:

php -r "requiere 'phar: //myproject.phar'; go ();"

O no tiene una función y ejecutará cualquier comando que tenga allí, pero generalmente tendría algunas funciones o archivos de clase en el PHAR.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top