PHP 是一種伺服器端腳本語言,最初由 Rasmus Lerdorf 於 1994 年開發,用於管理他的個人網站。 1995 年,PHP 向公眾發布,使 Web 開發人員能夠更輕鬆地創建動態內容。 PHP 程式碼在伺服器端運行,非常適合建立與資料庫互動、處理使用者輸入和提供動態網頁的 Web 應用程式。
讓我們從一個簡單的例子開始:
echo "Hello world";
如果您透過電腦的終端機執行此程式碼,那麼您將在終端機中得到輸出「Hello world」。我們知道我們的計算機只能理解0或1這樣的機器碼。
為了理解這一點,讓我們看看電腦如何理解程式碼。電腦只能理解機器碼,它是二進位格式(0 和 1)。對於要執行的高階程式碼(例如 PHP),需要將其轉換為機器碼。這就是編譯器和解釋器發揮作用的地方。
編譯器和解釋器都是翻譯軟體或程序,將用程式語言編寫的原始程式碼轉換為機器碼。也就是說,我們編寫的人類可以理解的程式碼被這些編譯器或解釋器轉換為電腦可以理解的機器碼(0和1),使其能夠執行指令並向我們提供輸出。讓我們深入了解這些翻譯器的基本概述,以便更好地理解它們。
解釋器是一種翻譯器,它逐行讀取用高階語言編寫的整個原始程式碼,並立即將每一行轉換為機器碼。如果它在讀取一行程式碼時遇到錯誤,它會立即停止並向程式設計師報告錯誤,從而更容易調試。與編譯器相比,這種逐行執行也使其過程更慢。
編譯器是一種翻譯器,它將用高階語言編寫的整個原始程式碼一次轉換為機器碼。如果程式碼中存在錯誤,編譯器仍然會編譯整個程式碼,但錯誤會在運行時被捕獲,從而使程式設計師更難識別和修復錯誤。然而,由於編譯器將整個原始程式碼一次轉換為機器碼,因此在執行過程中它通常比解釋器執行得更快。
所以答案是,PHP 主要是一種解釋性語言。當 PHP 腳本運行時,PHP 解釋器在執行時間解析並執行程式碼,而不是像 C 或 C 等編譯語言那樣預先編譯為機器碼。但是,一些最佳化(例如使用 OPcache 等工具進行字節碼快取)可以透過儲存已編譯的字節碼來避免在每個請求上重新解釋程式碼來提高效能。
還有像 HHVM(HipHop 虛擬機)這樣的項目,它是由 Facebook 開發的,用於使用即時 (JIT) 編譯過程執行 PHP 程式碼。這使得它能夠將 PHP 程式碼編譯為中間字節碼,然後將其即時編譯為機器碼,從而使 PHP 執行速度更快。在 PHP 8 中,JIT 編譯直接整合到 PHP 中,允許編譯部分程式碼,進一步模糊解釋行為和編譯行為之間的界線。
JIT,即時編譯,是一種透過「及時」而不是提前編譯程式碼的一部分來執行程式碼的方法。與逐行讀取和執行程式碼的傳統解釋執行不同,JIT 編譯會在執行時間需要之前將部分程式碼轉換為機器碼。這會導致執行速度更快,因為機器碼直接在 CPU 上運行,避免了重複解釋的需要。
JIT 編譯位於完全解釋執行與完全編譯執行之間。它的一般運作原理如下:
初始解釋:程式碼最初以輕量級方式解釋或運行,以分析哪些部分最常使用或計算密集。
即時編譯:JIT 編譯器辨識「熱點」-經常運作或需要最佳化的程式碼部分。然後它在運行時將這些部分編譯成機器碼。
執行:儲存編譯後的機器碼,因此以後的執行可以使用最佳化版本而無需重新編譯,從而加快效能。
在 PHP 中,PHP 8 中引入了 JIT,透過在執行時將常用函數或循環編譯為機器碼,可以使它們運行得更快。其他語言,例如 JavaScript(例如 Chrome 中的 V8 引擎)和 Java,也使用 JIT 編譯來獲得類似的效能優勢。
在第一個區塊中,我們有編寫的程式碼。程式碼首先進入 JIT(即時編譯器)。然後 JIT 編譯並執行程式碼。在執行過程中,JIT 逐行讀取程式碼,並在讀取後立即將每一行轉換為機器碼。如果在讀取過程中任何一行出現錯誤,它會立即停止並拋出該錯誤。
因此,這讓我們對電腦如何理解和運行高級 PHP 程式碼(我們寫的程式碼)有一些了解。
PHP 腳本可以在兩種主要環境中執行:命令列介面 (CLI) 和 Web 伺服器環境。
命令列介面(CLI):PHP 程式碼可以直接從電腦上的命令列執行。這使得開發人員無需瀏覽器即可運行腳本,通常用於自動化、cron 作業或測試腳本。
Web 伺服器環境:PHP 通常在 Web 伺服器環境中運行,其中執行程式碼以回應來自客戶端/瀏覽器的請求。當請求 PHP 腳本時,Web 伺服器會透過介面層(如 CGI、FastCGI 或 FPM)與 PHP 引擎通信,後者處理腳本並將輸出傳回給客戶端。
每種環境服務於不同的用例,使 PHP 成為 Web 和命令列應用程式的靈活語言。
我們的電腦包含各種出於不同目的而運行的應用程式或程式。然而,當我們去運行這些應用程式或程式時,它們無法自行執行。相反,它們透過電腦的作業系統運作。當我們用PHP編寫程式碼時,它也變成了我們可以透過電腦終端運行的程式。因此,當我們透過終端運行程式碼時,它也會透過作業系統執行。
那麼,問題是:這個應用程式或程序,或者我們編寫的程式碼,如何與我們的電腦作業系統進行通訊?
這裡,用來與作業系統通訊的手段稱為OS API(Operating System’s API)。透過這個作業系統API,應用程式或程式可以與電腦的作業系統進行通信,如上圖所示。這讓我們對 PHP 程式碼如何透過我們電腦上的終端運行有一些了解。
首先,我們從客戶端/瀏覽器向 Web 伺服器發送請求。但是,Web 伺服器無法直接與 PHP 引擎通訊。對於 Web 伺服器和 PHP 引擎之間的通信,它們之間有一個中間層,稱為 SAPI 或伺服器 API。使用不同的協定作為 SAPI,允許 Web 伺服器與 PHP 引擎進行通訊。這些協定包括CGI、FastCGI、mod_php、FPM等。這些協定中的任何一種都可以用於Web伺服器和PHP引擎之間的通訊。
運行 PHP 腳本的兩個最受歡迎的 Web 伺服器是 Apache 和 Nginx:
這讓我們更能理解 PHP 程式碼如何在 Web 伺服器上運作。基於以上幾點。
我希望對 PHP 程式碼在幕後如何實際運作有一個基本的了解。如果有幫助,別忘了分享給其他人。
以上是PHP 的工作原理 - 幕後花絮的詳細內容。更多資訊請關注PHP中文網其他相關文章!