¿Cómo sacar partido al servidor http embebido que traen las nuevas versiones de PHP?
Sé que si te dedicas al desarrollo web como yo tendrás instalado con toda probabilidad en tu ordenador de trabajo algún servidor http más o menos profesional, casi con seguridad basado en apache, como Xampp o Wamp para Windows, Mamp para Mac o el consabido LAMP en Linux.
Pero aunque sólo sea para aprender algo nuevo o sencillamente por hacer una instalación o prueba rápida voy a presentarte la posibilidad, si tienes instalado php 5.4 o superior de utilizar el servidor http embebido que lleva incorporado.
Lo primero: es necesario aclarar que no se trata de un servidor que debamos usar en producción. Aunque a menudo puedes necesitar probar algo en una máquina diferente de la tuya o probar alguna funcionalidad sin afectar a la configuración de los virtualhost de apache de la máquina en cuestión.
Vamos a ver como se haría y en todo caso la aplicación práctica puede venir con un uso futuro. Cuando termines de leer este artículo sabrás usarlo, o al menos que existe la posibilidad, aunque no tengas muy claro los propósitos inicialmente.
Para arrancar el servicio, tal y como lo haríamos con un apache, desde el terminal invocaremos la orden php -S localhost:port, siendo localhost la IP por la que vamos a acceder, si quisieramos que este servicio esté disponible a otros ordenadores de nuestra red en lugar de localhost pondríamos 0.0.0.0
Si tenemos funcionando un servidor apache en el puerto convencional 80 es conveniente lanzar el comando anterior (php -S localhost:port) con un puerto diferente al 80, para no solaparnos con el de apache, en el mejor de los casos no se atenderá la petición correctamente y en el peor podemos dejar al ordenador colgado.
Una vez iniciado veremos la siguiente traza en el terminal:
PHP 5.4.24 Development Server started at Tue Apr 15 23:43:00 2014
Listening on http://localhost:8080
Document root is /Users/joseluislaso/prueba
Press Ctrl-C to quit.
Una de las ventajas de usar este método es que todas las peticiones que se hagan en el navegador producirán una salida en el terminal con los detalles de la misma.
Por ejemplo si ponemos en la barra del navegador la siguiente direccion: http://localhost:8080 veremos la siguiente traza:
[Tue Apr 15 23:45:10 2014] ::1:64354 [302]: /
[Tue Apr 15 23:45:10 2014] ::1:64358 [404]: /favicon.ico - No such file or directory
[Tue Apr 15 23:45:10 2014] ::1:64359 [404]: /favicon.ico - No such file or directory
Como puedes ver además de lo que se muestre propiamente en el navegador obtendremos de manera inmediata el resultado de lo que hace internamente el servidor de http.
Esto también lo podemos obtener de apache con un tail del log, pero aquí es mucho más rápido y compacto en principio.
Veamos ahora de que manera podemos configurar el comportamiento del servidor embebido.
- Podemos indicar una carpeta como raiz, simplemente indicándola a continuación:
php -S localhost:8080 /raiz
- Podemos indicar un script enrutador que hará las veces de .htaccess, de alguna manera antes de servir cualquier archivo se invocará primero el archivo router y se hará lo que ahí se indique.
Un ejemplo de router:
Fíjate en que el router está filtrando por el tipo de archivo que se le está pidiendo, dando paso tal cual a los archivos de imágenes y añadiendo a la salida un texto en los demás casos. Este es un ejemplo didáctico y su utilidad es bastante nula, en todo caso ten en cuenta que si añadimos a la salida algo antes de enviar una imágen, el flujo de datos hará creer al navegador que la imagen está corrupta, por ello se han exceptuado en el router.
Conclusión
Los usos prácticos de este mini-tutorial quedan de la mano del lector, como ya he dicho te va permitir por ejemplo probar algún proyecto que te hayas clonado de github y al que quieras echar un vistazo sin necesidad de configurar un virtualhost para él.
Recuerda en todo caso que no es un sistema seguro para producción.
Puedes encontrar más información en php.net