Servidor web interno
Advertencia
Este servidor web está destinado a ayudar en el desarrollo de aplicaciones. También puede ser útil para pruebas y para demostraciones de aplicaciones que se ejecutan en entornos controlados. Sin embargo, no está diseñado para ser un servidor web completo. Por lo tanto, no debe utilizarse en una red pública.
El CLI SAPI proporciona un servidor web interno.
El servidor web se ejecuta en un solo proceso single-threaded, las aplicaciones PHP se retrasarán/suspenderán si una solicitud está bloqueada.
Las solicitudes URI se sirven desde el directorio de trabajo actual donde se inició PHP, a menos que se utilice la opción -t para especificar explícitamente un documento raíz. Si una solicitud URI no especifica un archivo, entonces el archivo index.php o el archivo index.html del directorio actual será devuelto. Si ninguno de estos archivos existe, la búsqueda de un archivo index.php e index.html continuará en el directorio padre y así sucesivamente hasta que se encuentre uno de estos archivos o se alcance el directorio raíz. Si se encuentra un archivo index.php o index.html, se devolverá y $_SERVER['PATH_INFO'] se establecerá como la última parte de la URI. De lo contrario, se devolverá un código de respuesta 404.
Si se proporciona un archivo PHP en la línea de comandos cuando se inicia el servidor web, se tratará como un script "ruteador". El script se ejecutará al inicio de cada solicitud HTTP. Si este script devuelve false
, entonces el recurso solicitado se devolverá tal cual. De lo contrario, la salida del script se devolverá al navegador.
Los tipos MIME estándar se devuelven para archivos con las extensiones:
.3gp
, .apk
, .avi
, .bmp
, .css
, .csv
, .doc
, .docx
, .flac
, .gif
, .gz
, .gzip
, .htm
, .html
, .ics
, .jpe
, .jpeg
, .jpg
, .js
, .kml
, .kmz
, .m4a
, .mov
, .mp3
, .mp4
, .mpeg
, .mpg
, .odp
, .ods
, .odt
, .oga
, .ogg
, .ogv
, .pdf
, .png
, .pps
, .pptx
, .qt
, .svg
, .swf
, .tar
, .text
, .tif
, .txt
, .wav
, .webm
, .wmv
, .xls
, .xlsx
, .xml
, .xsl
, .xsd
, .zip
.
A partir de PHP 7.4.0, el servidor web integrado puede configurarse para bifurcar varios trabajadores para probar código que requiere múltiples solicitudes concurrentes al servidor web integrado. Establezca la variable de entorno PHP_CLI_SERVER_WORKERS en el número de trabajadores deseados antes de iniciar el servidor.
Nota:
Esta funcionalidad no está soportada en Windows.
Advertencia
Esta funcionalidad experimental no está destinada a ser utilizada en producción. En general, el Servidor Web integrado no está destinado a ser utilizado en producción.
Ejemplo #1 Inicio del servidor web
$ cd ~/public_html
$ php -S localhost:8000
PHP 5.4.0 Development Server started at Thu Jul 21 10:43:28 2011
Listening on localhost:8000
Document root is /home/me/public_html
Press Ctrl-C to quit
Después de las solicitudes URI a http://localhost:8000/ y http://localhost:8000/myscript.html, el terminal mostrará algo como:
PHP 5.4.0 Development Server started at Thu Jul 21 10:43:28 2011
Listening on localhost:8000
Document root is /home/me/public_html
Press Ctrl-C to quit.
[Thu Jul 21 10:48:48 2011] ::1:39144 GET /favicon.ico - Request read
[Thu Jul 21 10:48:50 2011] ::1:39146 GET / - Request read
[Thu Jul 21 10:48:50 2011] ::1:39147 GET /favicon.ico - Request read
[Thu Jul 21 10:48:52 2011] ::1:39148 GET /myscript.html - Request read
[Thu Jul 21 10:48:52 2011] ::1:39149 GET /favicon.ico - Request read
Tenga en cuenta que antes de PHP 7.4.0, los recursos estáticos en enlace simbólico no son accesibles en Windows, a menos que el script ruteador lo maneje.
Ejemplo #2 Inicio con un directorio raíz específico
$ cd ~/public_html
$ php -S localhost:8000 -t foo/
PHP 5.4.0 Development Server started at Thu Jul 21 10:50:26 2011
Listening on localhost:8000
Document root is /home/me/public_html/foo
Press Ctrl-C to quit
Ejemplo #3 Uso de un script ruteador
En este ejemplo, solicitar imágenes las mostrará, pero las solicitudes de archivos HTML mostrarán "¡Bienvenido a PHP!".
<?php
// router.php
if (preg_match('/\.(?:png|jpg|jpeg|gif)$/', $_SERVER["REQUEST_URI"])) {
return false; // devuelve la solicitud tal cual.
} else {
echo "<p>¡Bienvenido a PHP!</p>";
}
?>
$ php -S localhost:8000 router.php
Ejemplo #4 Verificación de la utilización de CLI del servidor web
Para reutilizar un script ruteador del marco durante el desarrollo con el CLI del servidor web y luego continuar utilizándolo con un servidor web de producción:
<?php
// router.php
if (php_sapi_name() == 'cli-server') {
/* Activar la ruta estática y devolver FALSE */
}
/* continuar con las operaciones de un index.php normal */
?>
$ php -S localhost:8000 router.php
Ejemplo #5 Manejo de tipos de archivos no soportados
Si necesita servir un recurso estático para el cual el tipo MIME no es manejado por el CLI del servidor web, use esto:
<?php
// router.php
$path = pathinfo($_SERVER["SCRIPT_FILENAME"]);
if ($path["extension"] == "el") {
header("Content-Type: text/x-script.elisp");
readfile($_SERVER["SCRIPT_FILENAME"]);
}
else {
return FALSE;
}
?>
$ php -S localhost:8000 router.php
Ejemplo #6 Acceso al CLI del servidor web desde una máquina remota
Puede hacer que el servidor web sea accesible en el puerto 8000 para todas las interfaces con:
Advertencia
El servidor web integrado no debe utilizarse en una red pública.