{"id":85302,"date":"2022-08-10T11:14:17","date_gmt":"2022-08-10T11:14:17","guid":{"rendered":"https:\/\/magazineoffice.com\/como-probar-rapidamente-sitios-web-con-el-servidor-web-incorporado-de-php\/"},"modified":"2022-08-10T11:14:20","modified_gmt":"2022-08-10T11:14:20","slug":"como-probar-rapidamente-sitios-web-con-el-servidor-web-incorporado-de-php","status":"publish","type":"post","link":"https:\/\/magazineoffice.com\/como-probar-rapidamente-sitios-web-con-el-servidor-web-incorporado-de-php\/","title":{"rendered":"C\u00f3mo probar r\u00e1pidamente sitios web con el servidor web incorporado de PHP"},"content":{"rendered":"


\n<\/p>\n

\n

\u00bfNecesita iniciar r\u00e1pidamente un servidor web para probar una aplicaci\u00f3n PHP? \u00a1El int\u00e9rprete de PHP tiene uno incorporado! Puede usar esto para inspeccionar r\u00e1pidamente su trabajo sin ejecutar Apache, NGINX o una soluci\u00f3n de contenedorizaci\u00f3n.<\/p>\n

El servidor integrado de PHP recibe relativamente poca atenci\u00f3n, pero es bastante poderoso para fines de desarrollo. En esta gu\u00eda, le mostraremos c\u00f3mo puede usarlo como una alternativa a otros microservidores como SimpleHTTPServer de Python o el paquete npm del servidor http, ninguno de los cuales puede ejecutar scripts PHP.<\/p>\n

Uso del servidor incorporado<\/h2>\n

El servidor incorporado es un mecanismo conveniente para ayudarlo a probar sitios PHP en entornos que carecen de un servidor HTTP completo. Est\u00e1 disponible en PHP 5.4 y todas las versiones posteriores. Puede ejecutarlo directamente desde su directorio de trabajo sin tener que configurar primero un host virtual.<\/p>\n

Antes de usar el servidor, tenga en cuenta que est\u00e1 dise\u00f1ado solo para desarrollo. La documentaci\u00f3n de PHP advierte expl\u00edcitamente contra la implementaci\u00f3n de este servidor frente a las aplicaciones de producci\u00f3n. No es lo suficientemente seguro para estar expuesto en redes de acceso p\u00fablico.<\/p>\n

Iniciar el servidor<\/h2>\n

El servidor se inicia pasando el -S<\/code> bandera a la php<\/code> ejecutable:<\/p>\n

$ php -S localhost:8080
\n[Fri Jun 10 16:00:00 2022] PHP 8.1.5 Development Server (http:\/\/localhost:8080) started<\/pre>\n

El argumento dado al comando especifica la direcci\u00f3n de escucha del servidor. Hemos usado el puerto 8080<\/code> en localhost<\/code> en el ejemplo anterior. Ahora puedes visitar http:\/\/localhost:8080<\/code> en su navegador web para acceder al contenido de su directorio de trabajo. Cualquier script PHP se ejecutar\u00e1 autom\u00e1ticamente cuando lo solicite.<\/p>\n

Puede servir una ruta que est\u00e9 fuera de su directorio de trabajo configurando el -t<\/code> marca cuando inicias el servidor:<\/p>\n

$ php -S localhost:8080 -t \/home\/$USER\/public_docs<\/pre>\n

La ra\u00edz del documento ahora ser\u00e1 \/public_docs<\/code> dentro de su carpeta de inicio.<\/p>\n

Mantenga abierta la ventana de su terminal mientras usa el servidor web. Presione Ctrl+C para finalizar el proceso una vez que haya terminado de probar su sitio. PHP registrar\u00e1 cada solicitud entrante en la ventana de su terminal, incluido el URI y el m\u00e9todo HTTP. Cualquier error de PHP no detectado tambi\u00e9n aparecer\u00e1 en los registros.<\/p>\n

Habilitaci\u00f3n del acceso remoto<\/h2>\n

Escuchando en localhost<\/code> no permitir\u00e1 conexiones entrantes de otros dispositivos en su red. Puede permitir el acceso remoto vinculando a 0.0.0.0<\/code> en cambio:<\/p>\n

$ php -S 0.0.0.0:8080<\/pre>\n

Recuerde que el servidor no est\u00e1 reforzado para su uso en producci\u00f3n y no debe exponerse p\u00fablicamente. Permita el acceso remoto solo cuando sea absolutamente necesario, como al probar una caracter\u00edstica particular en un dispositivo m\u00f3vil. Aseg\u00farate de que el puerto que usas no est\u00e9 abierto a Internet.<\/p>\n

Solicitar coincidencia alternativa<\/h2>\n

PHP buscar\u00e1 index.php<\/code> y index.html<\/code> archivos en la ra\u00edz del documento activo cuando la solicitud entrante carece de un componente URI. Si ninguno de estos archivos existe, el servidor seguir\u00e1 ascendiendo en el \u00e1rbol de directorios, buscando un \u00edndice en uno de los padres de la ra\u00edz de su documento. Esto significa que, sin querer, puede terminar sirviendo contenido que se encuentra fuera del directorio que ha especificado. Se emitir\u00e1 un estado 404 No encontrado cuando se alcance la parte superior del \u00e1rbol sin que se encuentre un archivo de \u00edndice.<\/p>\n

Las solicitudes que incluyen un URI (como \/file<\/code>) debe coincidir exactamente con un archivo est\u00e1tico en la ra\u00edz del documento. De lo contrario, se devolver\u00e1 un 404. PHP establece autom\u00e1ticamente el Content-Type<\/code> encabezado de respuesta al tipo MIME del archivo servido para las extensiones de archivo m\u00e1s populares.<\/p>\n

Uso de un script de enrutador<\/h2>\n

Opcionalmente, puede configurar el servidor web para llamar a un script en cada solicitud. Esto le permite usar el controlador frontal de su aplicaci\u00f3n para realizar un enrutamiento din\u00e1mico avanzado.<\/p>\n

La funcionalidad del enrutador se habilita proporcionando un nombre de archivo PHP en la l\u00ednea de comando cuando inicia el servidor:<\/p>\n

$ php -S localhost:8080 router.php<\/pre>\n

PHP ahora usar\u00e1 router.php<\/code> manejar cada<\/em> solicitud entrante. Puede enrutar a los usuarios al punto apropiado en su aplicaci\u00f3n al inspeccionar el URI de la solicitud:<\/p>\n

\n
\n
\n
\n
\n
\n
\n
if<\/span> (<\/span>$_SERVER<\/span>[<\/span>\"REQUEST_URI\"<\/span>]<\/span> ===<\/span> \"\/dashboard\"<\/span>)<\/span> <\/span>\n    require_once<\/span>(<\/span>\"dashboard.php\"<\/span>)<\/span>;<\/span>\n<\/span>\nelse<\/span> if<\/span> (<\/span>$_SERVER<\/span>[<\/span>\"REQUEST_URI\"<\/span>]<\/span> ===<\/span> \"\/profile\"<\/span>)<\/span> <\/span>\n    require_once<\/span>(<\/span>\"profile.php\"<\/span>)<\/span>;<\/span>\n<\/span>\nelse<\/span> <\/span>\n    require_once<\/span>(<\/span>\"404.php\"<\/span>)<\/span>;<\/span>\n<\/span><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n

La salida producida por la secuencia de comandos de su enrutador se convertir\u00e1 en la respuesta que se env\u00eda al cliente. Una excepci\u00f3n es si el script devuelve false<\/code>: en este caso, PHP recurrir\u00e1 a devolver el archivo est\u00e1tico que coincida con el URI de la solicitud original.<\/p>\n

\n
\n
\n
\n
\n
\n
\n
if<\/span> (<\/span>str_starts_with(<\/span>$_SERVER<\/span>[<\/span>\"REQUEST_URI\"<\/span>]<\/span>,<\/span> \"\/api\"<\/span>)<\/span>)<\/span> <\/span>\n    \/\/ Route to the correct API endpoint<\/span>\n    \/\/ ... <\/span>\n<\/span>\nelse<\/span> <\/span>\n    \/\/ Serve other routes statically<\/span>\n    return<\/span> false<\/span>;<\/span>\n<\/span><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n

Detecci\u00f3n del servidor incorporado a partir de su c\u00f3digo PHP<\/h2>\n

Su c\u00f3digo PHP puede detectar si el servidor web incorporado lo est\u00e1 llamando al inspeccionar el nombre de la interfaz activa. los php_sapi_name()<\/code> funci\u00f3n proporciona este valor. se establecer\u00e1 en cli-server<\/code> cuando el script fue invocado por el componente del servidor integrado.<\/p>\n

\n
\n
\n
\n
\n
\n
\n
if<\/span> (<\/span>php_sapi_name<\/span>(<\/span>)<\/span> ===<\/span> \"cli-server\"<\/span>)<\/span> <\/span>\n    enable_development_mode(<\/span>)<\/span>;<\/span>\n<\/span><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n

Manejo de m\u00faltiples solicitudes al mismo tiempo<\/h2>\n

El servidor se ejecuta de forma predeterminada en un modo s\u00edncrono de un solo proceso de forma predeterminada. Las solicitudes se manejan individualmente y se bloquean entre s\u00ed para que no se ejecuten hasta que se completen. Esta es una de las razones por las que el servidor no es adecuado para su uso en producci\u00f3n.<\/p>\n

PHP 7.4 agreg\u00f3 soporte para manejar m\u00faltiples solicitudes al mismo tiempo. Se basa en fork()<\/code> disponibilidad y no funciona en Windows. El servidor bifurcar\u00e1 a un nuevo trabajador para atender cada solicitud entrante cuando este modo est\u00e9 habilitado. Puede activarlo configurando el PHP_CLI_SERVER_WORKERS<\/code> variable de entorno a la cantidad de trabajadores que desea:<\/p>\n

$ PHP_CLI_SERVER_WORKERS=8 php -S localhost:8080<\/pre>\n

Esta funcionalidad todav\u00eda est\u00e1 marcada como experimental en PHP 8.1.<\/p>\n

Resumen<\/h2>\n

PHP tiene un servidor web incorporado que es una forma conveniente de probar sus aplicaciones y exponer r\u00e1pidamente el contenido del sistema de archivos local en su red local. Admite la ejecuci\u00f3n de scripts PHP, el enrutamiento general y los archivos est\u00e1ticos con los tipos MIME m\u00e1s comunes.<\/p>\n

Aunque el servidor ahora admite un modo de bifurcaci\u00f3n opcional, no es recomendable usarlo en producci\u00f3n. Est\u00e1 pensado como una ayuda para el desarrollo y carece de las funciones de personalizaci\u00f3n y seguridad que necesitar\u00e1 para sus implementaciones p\u00fablicas. Donde sobresale es como una alternativa liviana e integrada a las plataformas de desarrollo convencionales como los contenedores WAMP, XAMPP y Docker.<\/p>\n<\/div>\n