Laravel 是最受歡迎的 PHP 框架之一,它使 Web 開發變得高效且愉快。身為開發人員,您可能使用過 php artisanserve 指令來快速啟動本機開發伺服器。但是您有沒有想過當您執行此命令時幕後會發生什麼?讓我們一步步詳細探討這一點,了解 Laravel 如何識別和運行 ServeCommand,並深入了解 PHP 的內建伺服器是什麼以及它與 Nginx 或 Apache 等傳統 Web 伺服器的比較。
什麼是 php artisan 服務?
php artisanserve 指令是 Laravel 的一項功能,可為您的專案啟動本機 Web 伺服器。它使用 PHP 的內建伺服器使您的 Laravel 應用程式在開發過程中可以透過特定位址(例如 http://127.0.0.1:8000)存取。
此命令對於本機開發特別有用,因為它不需要設定像 Nginx 或 Apache 這樣成熟的 Web 伺服器。
逐步過程:運行 php artisanserve 時會發生什麼?
1。使用者執行指令
當您在終端機中輸入 php artisanserve 時,Laravel 的 Artisan Console(Laravel 的命令列工具)就會啟動。它就像一個包含各種命令的工具箱,可幫助建置、測試和運行 Laravel 應用程式。
2。工匠入口點
- 專案根目錄中的 artisan 檔案充當所有 Artisan 指令的入口點。
- 當您執行 php artisanserve 時,artisan 檔案會執行以下操作:
- 包含 Composer 的自動載入器 (vendor/autoload.php)。
- 使用 bootstrap/app.php 引導 Laravel 框架。
3。 Artisan 找到 ServeCommand
- Laravel 在應用程式啟動時註冊所有 Artisan 命令。對於像服務這樣的內建指令,Laravel 將它們註冊到 IlluminateFoundationProvidersArtisanServiceProvider 中。
- 此提供者將命令名稱(serve)對應到其對應的類別(IlluminateFoundationConsoleServeCommand)。
4. 命令解析與自動載入
- ServeCommand 位於命名空間 IlluminateFoundationConsole 下的供應商/laravel/framework 目錄中。
- Laravel 使用 Composer 的 PSR-4 自動載入組態來定位和載入類別。
- 這允許載入 ServeCommand 類,而無需完全初始化完整的 Laravel 框架。
5. 準備伺服器
- ServeCommand 設定 PHP 內建伺服器:
- 主機:預設為 127.0.0.1 (localhost)。
- 連接埠:預設為 8000(或透過 --port 選項自訂)。
- 文檔根目錄:指向Laravel入口文件(index.php)所在的公共目錄。
- 在內部,指令執行:
php -S 127.0.0.1:8000 -t public server.php
登入後複製
-
php -S 啟動 PHP 的內建伺服器。
-
-t public 指定文檔根目錄。
-
server.php:處理動態請求的路由器檔案。
6. 處理請求
- server.php 檔案充當路由器:
- 如果請求的檔案(例如CSS、JS)存在,則直接提供。
- 否則,請求將轉發到index.php。
7.Laravel 處理請求
- index.php 檔案初始化 Laravel 的框架並處理傳入的 HTTP 請求。
- 它將請求路由到適當的控制器,處理邏輯,並產生回應(例如 HTML 或 JSON)。
8. 回應被發回
Laravel 回應被傳送回 PHP 內建伺服器,然後傳遞給瀏覽器。
PHP 內建的伺服器是什麼?
PHP的內建伺服器是PHP 5.4中引入的一個簡單的開發伺服器。它旨在幫助開發人員測試應用程序,而無需安裝或配置完整的 Web 伺服器。
PHP內建伺服器的特性:
- 易於使用:使用單一命令 (php -S) 啟動它。
- 動態和靜態檔案:提供 PHP 腳本和靜態檔案(例如圖片或樣式表)。
- 自訂路由:允許透過路由器腳本(如 Laravel 的 server.php)自訂處理請求。
比較:PHP 內建伺服器與 Nginx/Apache
- 用途:PHP 內建伺服器僅用於開發目的。 Nginx/Apache 適用於生產就緒和開發。
- 效能:PHP內建伺服器是單一執行緒的(一次一個請求),Nginx/Apache是多執行緒的(同時處理多個請求)
- 設定:PHP 內建伺服器需要最少的設定。 nginx/Apache 需要設定檔。
- 進階功能:PHP 內建伺服器是有限的(例如,沒有快取)。 Nignx/Apache 可用於快取、負載平衡等。
雖然此設定很方便,但它僅用於開發。對於即時應用程序,Nginx 或 Apache 等 Web 伺服器提供處理生產流量所需的可擴充性和效能。
P.S.我總是對了解幕後的運作方式感興趣。這有助於我了解建立應用程式時實際發生的情況。你可以閱讀我的其他文章。
以上是當你在 Laravel 中運行'php artisanserve”時會發生什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!