php php-5.4 phar

¿Cómo ejecutar un archivo PHP webphar desde un servidor web PHP 5.4 incorporado?



php-5.4 (8)

Según el título, he creado un phar de prueba muy simple. Me gustaría probarlo con el servidor web incorporado (PHP 5.4) pero parece imposible.

php -S localhost:80 /path/to/myphar.php

Resultado: página en blanco (en el controlador frontal de phar está index.php realizando alguna salida HTML).

php -S localhost:80 -t /path/to/folder_with_index_and_phar

Con script de cargador:

<?php require ''phar://myphar.php''

Resultado en una página en blanco, de nuevo.

¿Es esto posible o tengo que usar Apache?

EDIT : después de un año necesito esto otra vez. Aquí está lo que está pasando (de las respuestas):

php -S localhost:80 -t /path/to/app.phar php -S localhost:80 -t /path/to/app.phar

Resultados en un error: /path/to/app.phar no es un directorio.

Mientras:

php -S localhost:80 -t . http://localost/app.phar/foo/bar

Funciona, pero no necesito el prefijo app.phar !

El uso de Apache y la configuración del índice del directorio en app.phar funciona como se esperaba.


¿Qué hay de crear un archivo index.php en el mismo directorio que app.phar? Su contenido debe ser:

<?php require "myapp.phar"; ?>

Luego acceda a él sirviendo ese archivo index.php usando el comando php -S localhost:80 /path/to/pharapp/index.php


Después de horas de perder el tiempo con el servidor web incorporado, finalmente encontró la solución a lo que está buscando. La clave es el archivo enrutador para el servidor web. Siga el procedimiento a continuación

1) Cree un archivo router.php para el servidor web incorporado con el siguiente contenido

$path = $_SERVER["REQUEST_URI"]; if($pathPosition = strpos($path,''/myapp'') !== false){ //Request has been made to Phar-ed application $pathPosition += strlen(''/myapp''); $file = substr($path, $pathPosition); //Here include the base path of your Phar-ed application with file path //I placed myphar.phar and router.php in the root directory for this example require_once("phar://myphar.phar/$file"); exit; } return FALSE;

Lo que hace esto: comprueba el Uri para el nombre de su aplicación, en mi caso "/ myapp" y luego extrae la ruta del archivo al que desea acceder. Luego incluye el archivo phared deseado en el script actual y sale. De lo contrario, procesa la solicitud como de costumbre.

2) Inicie el servidor web incorporado de la siguiente manera:

php -S localhost:80 -t . router.php

Lo que hace esto: enciende el servidor web incorporado que crea el directorio actual como carpeta raíz del documento y usa router.php como archivo del enrutador (ubicado en la misma carpeta)

3) Hacer una solicitud en el navegador de esta manera:

http://localhost/myapp/foo/bar

Obtendrá el archivo Phar-ed de su aplicación .phar

Déjame saber en caso de preguntas.

Nota: también puede usar expresiones regulares para hacer coincidir el patrón Uri en router.php


En Windows, si está utilizando el servicio xampp, puede usar este comando en la línea de comandos.

C:/xampp/php>"C:/xampp/php/php.exe" "C:/xampp/php/pharcommand.phar"


Por lo tanto, no entiendo por qué necesita el servidor Apache. Despues del comando

php -S localhost:80 -t /path/to/myphar.php

PHP 5.5.9-1ubuntu4 Development Server started at Fri Jun 6 22:27:49 2014 Listening on http://localhost:80 Document root is /tmp/http Press Ctrl-C to quit.

Significa que todo está bien, ve a la barra de direcciones de tu navegador y escribe

http://localhost:80

y ver el resultado de la ejecución del script.


Puede ejecutar una barra web con el servidor web incorporado cambiando el nombre de phar para tener una extensión .php (por ejemplo, mv app.phar app.php ), apuntando a ese directorio:

php -S localhost:80 -t /path/to/phar

y accediendo a él como http://localhost/app.php/someroute.php . La parte difícil suele ser configurar el código auxiliar , desechar el entorno y generar el phar .


Si está dispuesto a ser un poco más flexible, puede hacer lo que quiera al crear un archivo index.php y luego incluir su .phar que es posible de acuerdo con la documentación que indica que:

Usar una biblioteca de archivos Phar es idéntico a usar cualquier otra biblioteca PHP:

Por lo tanto, simplemente puedes incluirlo normalmente como tal:

<?php require_once "app.phar";

Después de ejecutar php -S localhost:80 se ejecutará el index.php y puede acceder a él a través de http://localhost .


php -S localhost:80 -t /path/to/phar no funcionará ya que el argumento -t está destinado a ser utilizado para directorios. El truco es que el servidor web php admite pasar un enrutador como argumento. Por lo tanto, suponga que su phar está en / tmp (puede estar en cualquier parte), así es como crea un enrutador simple y configura el servidor web:

echo ''<?php require("/path/to/phar");''>/tmp/router.php php -S localhost:80 /tmp/router.php


php -S localhost:8080 phpinfo.phar

Eso pareció funcionar bien para mí desde un simple archivo phpinfo(); que creé para poner phpinfo();

Noté en la documentación de PHP, al crear el archivo PHAR, que parece que necesita configurar apéndices para las interfaces CLI y WWW.

http://php.net/manual/en/phar.buildfromdirectory.php

<?php // create with alias "project.phar" $phar = new Phar(''project.phar'', 0, ''project.phar''); // add all files in the project $phar->buildFromDirectory(dirname(__FILE__) . ''/project''); $phar->setStub($phar->createDefaultStub(''cli/index.php'', ''www/index.php''));

EDITAR

Específicamente, esto es lo que hice.

#!/usr/bin/env php <?php $phar = new Phar(''phpinfo.phar'', 0, ''phpinfo.phar''); $phar->buildFromDirectory(__DIR__ . ''/phpinfo''); $phar->setStub($phar->createDefaultStub(''index.php''));

para crear un archivo phar de un directorio:

phpinfo/ └── index.php

e index.php era justo:

<?php phpinfo();