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.