Inbyggd webbserver

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök

Inbyggd webbserver

Varning

Denna webbserver är avsedd att underlätta applikationsutveckling. Den kan också vara användbar för teständamål eller för applikationsdemonstrationer som körs i kontrollerade miljöer. Den är inte avsedd att vara en fullfjädrad webbserver. Den bör inte användas på ett offentligt nätverk.

CLI SAPI tillhandahåller en inbyggd webbserver.

Webbservern kör endast en enkeltrådad process, så PHP-applikationer kommer att stanna om en begäran blockeras.

URI-förfrågningar serveras från den aktuella arbetskatalogen där PHP startades, om inte alternativet `-t` används för att specificera en explicit dokumentrot. Om en URI-förfrågan inte specificerar en fil, returneras antingen `index.php` eller `index.html` i den angivna katalogen. Om ingen av filerna existerar, fortsätter sökningen efter `index.php` och `index.html` i föräldrakatalogen och så vidare tills en hittas eller dokumentroten har nåtts. Om en `index.php` eller `index.html` hittas returneras den och `$_SERVER['PATH_INFO']` sätts till den efterföljande delen av URI:n. Annars returneras en 404-responskod.

Om en PHP-fil anges på kommandoraden när webbservern startas behandlas den som ett "router"-skript. Skriptet körs vid starten av varje HTTP-förfrågan. Om detta skript returnerar `false`, returneras den begärda resursen som den är. Annars returneras skriptets utdata till webbläsaren.

Standard MIME-typer returneras för filer med följande tillägg: `.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`.

Från och med PHP 7.4.0 kan den inbyggda webbservern konfigureras för att förgrena flera arbetare för att testa kod som kräver flera samtidiga förfrågningar till den inbyggda webbservern. Ställ in miljövariabeln `PHP_CLI_SERVER_WORKERS` till önskat antal arbetare innan du startar servern.

Notera: Denna funktion stöds inte på Windows.

Varning

Denna experimentella funktion är inte avsedd för produktionsanvändning. Generellt sett är den inbyggda webbservern inte avsedd för produktionsanvändning.

Exempel #1 Starta webbservern

$ cd ~/public_html
$ php -S localhost:8000

Terminalen kommer att visa:

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

Efter URI-förfrågningar till `http://localhost:8000/` och `http://localhost:8000/myscript.html` kommer terminalen att visa något liknande:

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

Observera att före PHP 7.4.0 har symlänkade statiska resurser inte varit tillgängliga på Windows, om inte router-skriptet hanterar dessa.

Exempel #2 Starta med en specifik dokumentrotkatalog

$ cd ~/public_html
$ php -S localhost:8000 -t foo/

Terminalen kommer att visa:

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

Exempel #3 Använda ett router-skript

I detta exempel kommer förfrågningar efter bilder att visa dem, men förfrågningar efter HTML-filer kommer att visa "Welcome to PHP":

<?php
// router.php
if (preg_match('/\.(?:png|jpg|jpeg|gif)$/', $_SERVER["REQUEST_URI"])) {
    return false;    // servera den begärda resursen som den är.
} else { 
    echo "<p>Welcome to PHP</p>";
}
?>
$ php -S localhost:8000 router.php

Exempel #4 Kontrollera användning av CLI-webbserver

För att återanvända ett ramverks router-skript under utveckling med CLI-webbservern och senare även med en produktionswebbserver:

<?php
// router.php
if (php_sapi_name() == 'cli-server') {
    /* routa statiska resurser och returnera false */
}
/* fortsätt med normala index.php-operationer */
?>
$ php -S localhost:8000 router.php

Exempel #5 Hantera icke-stödda filtyper

Om du behöver servera en statisk resurs vars MIME-typ inte hanteras av CLI-webbservern, använd:

<?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

Exempel #6 Åtkomst till CLI-webbservern från fjärrmaskiner

Du kan göra webbservern tillgänglig på port 8000 för alla gränssnitt med:

$ php -S 0.0.0.0:8000

Varning

Den inbyggda webbservern bör inte användas på ett offentligt nätverk.

Sidslut

Orginalhemsidan på Engelska :https://www.php.net/manual/en/features.commandline.webserver.php

PHP

Funktioner


Det här är en maskinöversättning av PHP-manualen till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på https://www.linux.se/kontaka-linux-se/

Tack till Datorhjälp.se som har sponsrat Linux.se med webserver.