Web server interno
Avviso
Questo server web è stato sviluppato per aiutare lo sviluppo di applicazioni. Può
anche essere utile per scopo di test o per dimostrazioni applicative che sono
eseguite in ambienti controllati. Non è destinato ad essere un web server
con tutte le funzionalità. Non dovrebbe essere usato su una rete pubblica.
La CLI SAPI fornisce un web server interno.
Il web server esegue solo un processo con un thread, quindi
le applicazioni PHP andranno in stallo se una richiesta è bloccata.
Le richieste URI sono eseguite dalla cartella di lavoro corrente, in cui
PHP è stato eseguito, a meno che non sia stata usata l'opzione -t per specificare una
radice dei documenti. Se una richiesta URI non specifica un file,
allora viene restituito o index.php o index.html nella directory
data. Se i file non esistono, la ricerca per index.php e index.html
continuerà nella cartella padre e così via finchè non ne viene trovato uno o
non viene raggiunto il document root. Se viene trovato un index.php o un index.html,
esso viene restituito e viene impostato $_SERVER['PATH_INFO'] alla parte finale
dell'URI. In caso contrario viene restituita una risposta con il codice 404.
Se un file PHP viene specificato sulla linea di comando quando viene attivato il web server,
viene trattato come script "router" per il web server.
Lo script è eseguito all'inizio di ogni richiesta HTTP. Se
restituisce false
, la risorsa richiesta viene ritornata
così com'è. altrimenti viene restituito al browser il risultato dello script.
I tipi MIME standard vengono restituiti per i file con le estensioni:
.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
.
As of PHP 7.4.0, the built-in webserver can be configured to fork multiple
workers in order to test code that requires multiple concurrent requests
to the built-in webserver.
Set the PHP_CLI_SERVER_WORKERS environment variable to the
number of desired workers before starting the server.
Nota:
This feature is not supported on Windows.
Avviso
This experimental feature is not
intended for production usage. Generally, the built-in Web Server is
not intended for production usage.
Example #1 Avvio del web server
$ 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
Dopo le richiste URI per http://localhost:8000/ e
http://localhost:8000/myscript.html il terminale mostrerà
qualcosa di simile a:
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
Notare che prima di PHP 7.4.0, le risorse statiche con collegamenti simbolici non erano
accessibili su Windows, a meno che lo script del router non le gestisse.
Example #2 Esecuzione con una cartella di radice dei documenti specifica
$ 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
Example #3 Uso di uno script router
In questo esempio, le richieste per delle immagini le mostreranno, ma richieste per file HTML mostreranno "Welcome to PHP":
<?php
// router.php
if (preg_match('/\.(?:png|jpg|jpeg|gif)$/', $_SERVER["REQUEST_URI"])) {
return false; // serve la risorsa richiesta così com'è.
} else {
echo "<p>Welcome to PHP</p>";
}
?>
$ php -S localhost:8000 router.php
Example #4 Controllo dell'Uso del Server Web CLI
Per riutilizzare uno script del router del framework durante lo sviluppo con il web server CLI e successivamente anche con un server web di produzione:
<?php
// router.php
if (php_sapi_name() == 'cli-server') {
/* route static assets and return false */
}
/* prosegue con le normali operazioni di index.php */
?>
$ php -S localhost:8000 router.php
Example #5 Gestione Tipi File Non Supportati
Se si ha bisogno di restituire una risorsa statica il cui tipo MIME non viene gestito dal web server CLI, utilizzare:
<?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
Example #6 Accedere Al Web Server CLI Da Macchine Remote
È possibile rendere accessibile il web server sulla porta 8000 per qualsiasi interfaccia con:
Avviso
Il server Web integrato non deve essere utilizzato su una rete pubblica.