tag español attribute php stub phar

php - attribute - title html español



Por favor, explica cómo crear los apéndices Phar de PHP. (2)

Para responder mi propia pregunta.

El método descrito en mi pregunta, arriba, es una forma correcta de crear un código de phar / phar.

La razón por la que no funcionó para mí y funcionó para Mario (ver su comentario debajo de la pregunta), es porque tenía instalado Suhosin y necesitaba ajustar la configuración.

Se corrige utilizando la técnica descrita aquí :

Para arreglar, poner:

suhosin.executor.include.whitelist = "phar"

en /etc/php5/cli/php.ini

Estoy intentando crear una aplicación CLI de PHP muy simple que puede ejecutarse como un archivo phar desde la línea de comandos:

# php myProject.phar

Esto es lo que he intentado hasta ahora:

Mi proyecto

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

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

bootstrap.php

El archivo bootstrap.php contiene esto:

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

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

# cd MyProject # php bootstrap.php

Me sale el siguiente resultado:

5.3.2-1ubuntu4.9 i am some script

crearPhar.php

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

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

Cuando ejecuto ese script ...

# 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 script bootstrap.php .

En cambio no veo nada. No hay salida en absoluto. Esto implica que mi código de bootstrap.php no está incluido en el código auxiliar creado por $phar->createDefaultStub(''bootstrap.php'')

Creo que no entiendo cómo se crean los Phars y sus talones. ¿Podría, por favor, explicar dónde me he equivocado?


También podrías hacerlo así:

bootstrap.php;

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

entonces:

php -r "require ''phar: //Myproject.phar''; go ();"

o no tiene una función y ejecutará los comandos que tenga allí, pero normalmente tendrá algunas funciones o archivos de clase en el phar.