PHP的內置WEB服務器

在不少時候,咱們須要簡單的運行一個小 demo 來驗證一些代碼或者輪子是否可用,是否能夠運行起來,可是去配 nginx 或者 apache 都很麻煩,其實,PHP CLI 已經提供了一個簡單的測試服務器,咱們直接就能夠運行起來進行簡單的一些測試工做。php

直接啓動一個內置服務器

php -S localhost:8081

直接使用 -S 命令選項,而後指定地址及端口號,咱們就能夠運行起來一個 PHP 內置的簡易WEB服務器。默認狀況下,這個地址會找當前目錄下的 index.php 或 index.html 文件。當咱們在瀏覽器輸入指定的文件時,就是訪問指定的文件,若是都沒有找到會正常的返回404錯誤。html

而控制檯會輸出當前服務器的訪問狀況,以下圖所示:nginx

/img/bVcQ899

這個內置服務器和用 nginx 等服務器搭起來的應用服務器本質上沒有太大的區別,包括 $_SERVER 之類的內容均可以正常獲取到,也能夠正常使用 include 等功能加載其餘文件,也就是說這個內置WEB服務器運行一些框架也是沒有問題的。它是能夠徹底知足咱們的測試要求的。可是須要注意的是,這個內置WEB服務器不能用於生產環境。畢竟它的功能仍是太簡單,不是一個生產配備的高規格服務器應用。git

指定內置服務器的運行目錄

咱們也能夠在任何目錄去運行指定目錄的php代碼,只須要再增長一個 -t 選項來指明要運行起服務器的根目錄便可。github

php -S localhost:8081 -t dev-blog/php/202004/source

這樣咱們就能夠運行起來一個以 dev-blog/php/202004/source 目錄爲根目錄的測試環境服務器。web

使用路由腳本

php -S localhost:8081 PHP的內置WEB服務器.php

若是咱們給當前服務器直接指定了一個PHP文件,那麼直接打開連接就會訪問的是這個文件的內容,而不是去找 index.php 之類的文件。即便咱們繼續給 URL 後臺增長其餘路徑或者其餘文件名,它依然會打開的是這個文件,也就是說,咱們啓動了一個單文件入口的應用服務器程序。就像各類框架的 index.php 文件同樣,好比咱們利用這個文件作一個簡單的路由分發測試:apache

$routePages = [
    '/testRoute2.php',
    '/route/testRoute1.php'
];

if(in_array($_SERVER['REQUEST_URI'], $routePages)){
    include __DIR__ . $_SERVER['REQUEST_URI'];
}else{
    print_r($_SERVER);
}
// route/testRoute1.php
echo "Hello Route1!";

// testRoute2.php
echo "Hello Route2!";

兩個測試文件只是簡單的輸出了一段文字用於區別分別加載了兩個文件。上述代碼的意思是咱們訪問定義好的兩個路由路徑時,就會加載對應的文件,訪問其餘路徑則會打印當前服務器的 $_SERVER 信息。瀏覽器

測試代碼:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202004/source/PHP%E7%9A%84%E5%86%85%E7%BD%AEWEB%E6%9C%8D%E5%8A%A1%E5%99%A8.php服務器

參考文檔:
https://www.php.net/manual/zh/features.commandline.webserver.php框架

===========

各自媒體平臺都可搜索【硬核項目經理】

相關文章
相關標籤/搜索