現代 PHP 新特性系列(七) -- 內建的 HTTP 伺服器

來源:互聯網
上載者:User
從PHP 5.4.0 起,PHP內建了Web伺服器,這對於認為需要Apache或Nginx才能預覽PHP應用的開發人員來說又是一個隱藏功能。這個內建的Web伺服器不應該用於生產環境,但對於本地開發來說是個極好的工具。Laravel Valet 起初就是使用這個內建的伺服器,但是在1.1.0版本後將其替換為Caddy(查看相關新聞)。

1、啟動

這個內建的Web伺服器很容易啟動,開啟終端(Windows下對應是cmd命令列),進入項目根目錄,執行如下命令即可:

php -S localhost:8000

上述命令會新啟動一個PHP Web伺服器,地址是 localhost ,監聽的連接埠是 8000 ,當前所在目錄就是這個Web伺服器的根目錄。

現在,開啟瀏覽器,訪問 http://localhost:8000 就可以預覽應用了。在Web瀏覽器中瀏覽應用時,每個HTTP請求的資訊都會記錄到終端的標準輸出中,因此我們可以查看應用是否拋出了404或500響應:

有時候我們需要在同一區域網路中的另一台裝置中訪問這個伺服器(例如iPad或本地虛擬機器),為此,我們可以把 localhost 換成 0.0.0.0 ,讓PHP Web伺服器監聽所有介面:

php -S 0.0.0.0:8000

要想停止Web伺服器,可以關閉終端,也可以按Ctrl+C快速鍵。

2、配置

應用常常需要使用專屬的PHP設定檔,尤其是對記憶體使用量、檔案上傳、分析或對位元組程式碼快取有特殊要求時,一定要單獨配置,我們可以使用 -c 選項,讓PHP內建的伺服器使用指定的設定檔:

php -S localhost:8000 -c app/config/php.ini

3、路由指令碼

PHP內建伺服器明顯遺漏了一個功能:與Apache和Nginx不同,它不支援 .htaccess 檔案,因此,這個伺服器很難使用多數流行的PHP架構中常見的前端控制器(單一入口檔案 index.php ,用於轉寄所有HTTP請求,現在主流PHP架構如Laravel、Symfony都是這樣)。

PHP內建伺服器使用路由指令碼彌補了這一缺憾,處理每個HTTP請求前,會先執行這個路由指令碼,如果結果為 false ,返回當前HTTP請求中引用的靜態資源URI,否則會把路由指令碼的執行結果當做HTTP響應主體返回。換句話說,路由指令碼的作用其實和 .htaccess 一樣。

路由指令碼的用法很簡單,只需要在啟動PHP內建伺服器時指定這個PHP指令檔的路徑即可:

php -S localhost:8000 router.php

關於路由指令碼,有興趣的同學可以研究下LaravelValet底層的 server.php ( https://github.com/laravel/valet/blob/master/server.php )。

4、判斷函數

有時候需要知道PHP指令碼使用的是PHP內建的Web伺服器還是使用傳統的Web伺服器,這樣方便我們為不同伺服器設定不同的回應標頭。我們可以使用 php_sapi_name() 函數檢查使用的是哪個PHP Web伺服器,如果當前指令碼使用的是PHP內建伺服器,則該函數返回字串 cli-server :

    

5、缺點

PHP內建的Web伺服器不能在產生環境使用,只能在本地開發環境中使用,這是因為其相比Apache或Nginx有諸多不足:

  • 效能不佳。一次只能處理一個請求,其他請求會受到阻塞。如果某個進程耗時較長(資料庫查詢、遠程API調用),則整個Web應用會陷入停頓狀態。
  • 支援媒體類型較少(這一點PHP 5.5.7以後有較大改進)。
  • 路由指令碼僅支援少量的URL重寫,更進階則還是需要Apache或Nginx。
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.