jueves, 26 de enero de 2012

Servidor web integrado de PHP 5.4 #php #twig #silex

A partir de PHP 5.4, el PHP-CLI incluye un servidor web integrado.

Plantilla:


La plantilla contiene un servidor standalone de PHP5.4 para windows sin extensiones con Silex y Twig (en Phar) con un routing básico y sirviendo estáticos en una carpeta a parte.

Modo de uso:

Para lanzar un servidor http con el cliente php, basta con ejecutar el siguiente comando:

php -S <bind_addr>:<port> -t <document_root> <folder_or_dispatcher_to_serve>


  • <bind_addr> - Ip de la interfaz a la que queremos hacer el bind (127.0.0.1 para acceder únicamente en local y 0.0.0.0 para que se pueda acceder desde cualquier interfaz)
  • <port> - Puerto donde queremos escuchar (el puerto http por defecto es el puerto 80)
  • <document_root> - Ruta de $_SERVER['DOCUMENT_ROOT']
  • <folder_or_dispatcher_to_server> - Si se especifica una carpeta, php servirá estáticos en esa carpeta y procesará los archivos .php. Si se especifica un arhcivo, php llamará en cada ocasión al fichero PHP para que se encargue gestionar todas las peticiones independientemente del path con un return false; en el ámbito global, haremos que PHP gestione la URL.
Ejemplo:

Servirá únicamente en local en el puerto por defecto (url http://localhost/) con un dispatcher.php que gestionará el routing y estableciendo como DOCUMENT_ROOT el directorio actual.
php -S 127.0.0.1:80 -t . dispatcher.php

Sobre la plantilla incluída

He montado una pequeña plantilla para ilustrar cómo usar PHP en modo servidor. Para lanzarlo basta con ejecutar el archivo run.bat y acceder a http://localhost/.

run.bat <- Al ejecutar run.bat lanzamos PHP en modo servidor stand-alone
@echo off
"%~dp0\bin\php\php.exe" -S localhost:80 "%~dp0\code\dispatcher.php"

Carpeta bin/php <- Contiene los archivos mínimos de PHP5.4 para poder ejecutarlo.

Carpeta public/static <- La carpeta public/static la sirve el dispatcher.php en modo cliente, en producción la carpeta debería servirla el servidor http: apache, cherokee, nginx...

Carpeta code <- Aquí está el código PHP del dispatcher y los phars con las librerías Silex y Twig.

Carpeta views <- Contiene las plantillas de twig que se usarán.

2 comentarios:

  1. Muy bueno.
    Esto es lo que tendrian que comparar contra node.js en cuanto a rendimiento, no el monstruo apache+php+extensiones

    Tomo nota para probarlo.

    ------------------------
    Guillermo Torres
    http://gtorres.itcron.com

    ResponderEliminar
  2. Hola Guillermo.

    Me había puesto a escribir aquí una "explicación", pero me estaba extendiendo tanto que voy a crear un post entero :)

    ¡Saludos!

    ResponderEliminar