首頁 後端開發 php教程 php在web伺服器上的運作模式詳解

php在web伺服器上的運作模式詳解

Oct 24, 2018 pm 05:34 PM
php

這篇文章帶給大家的內容是關於php在web伺服器上的運作模式詳解,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

CGI通用網關介面(Common Gateway Interface)

CGI即通用網關介面(Common Gateway Interface),它是一段程式, 通俗的講CGI就像是一座橋,把網頁和WEB伺服器中的執行程序連接起來,它把HTML接收的指令傳遞給伺服器的執行程序,再把伺服器執行程式的結果回饋給HTML頁。 CGI 的跨平台效能極佳,幾乎可以在任何作業系統上實現。 CGI已經是比較老的模式了,這幾年都很少用了。

每有一個使用者請求,都會先要建立cgi的子進程,然後處理請求,處理完後結束這個子進程,這就是fork-and-execute模式。當使用者請求數量非常多時,會大量擠佔系統的資源如內存,CPU時間等,造成效能低。所以用cgi方式的伺服器有多少連線請求就會有多少cgi子進程,子進程反覆載入是cgi效能低下的主要原因。

如果不想把 PHP 嵌入到伺服器端軟體(如 Apache)作為一個模組安裝的話,可以選擇以 CGI 的模式安裝。或把 PHP 用於不同的 CGI 封裝以便為程式碼建立安全的 chroot 和 setuid 環境。這樣每個客戶機請求一個php文件,Web伺服器就呼叫php.exe(win下是php.exe,linux是php)去解釋這個文件,然後再把解釋的結果以網頁的形式傳回給客戶機。這種安裝方式通常會把 PHP 的執行檔安裝到 web 伺服器的 cgi-bin 目錄。 CERT 建議書 CA-96.11 建議不要把任何的解釋器放到 cgi-bin 目錄。

這種方式的好處是把web server和具體的程式處理獨立開來,結構清晰,可控性強,同時缺點就是如果在高存取需求的情況下,cgi的進程fork就會成為很大的伺服器負擔,想像數百個並發請求導致伺服器fork出數百個進程就明白了。這也是為什麼cgi一直背負性能低下,高資源消耗的惡名的原因。

fast-cgi (常駐(long-live) 型的CGI)

cgi模式的變種,也就是(cgi是普通人,fast-cgi是特種兵)

FastCGI 像是一個常駐(long-live) 型的CGI,它可以一直執行著,只要激活後,不會每次都要花費時間去fork 一次(這是CGI 最為人詬病的fork-and-execute 模式)。

FastCGI的工作原理是:

  1. Web Server啟動時載入FastCGI進程管理器【PHP的FastCGI進程管理器是PHP-FPM(php-FastCGI Process Manager)】(IIS ISAPI或Apache Module);

  2. #FastCGI進程管理器本身初始化,啟動多個CGI解釋器進程(在工作管理員中可見多個php-cgi.exe)並等待來自Web Server的連線。

  3. 當客戶端請求到達Web Server時,FastCGI進程管理器選擇並連線到一個CGI解釋器。 Web server將CGI環境變數和標準輸入傳送到FastCGI子進程php-cgi。

  4. FastCGI子進程完成處理後將標準輸出和錯誤訊息從相同連線傳回Web Server。當FastCGI子程序關閉連線時,請求便告處理完成。 FastCGI子進程接著等待並處理來自FastCGI進程管理器(運行在 WebServer中)的下一個連線。在正常的CGI模式中,php-cgi.exe在此便退出了。

在CGI模式中,你可以想像 CGI通常有多慢。每一個Web請求PHP都必須重新解析php.ini、重新載入全部dll擴充並重初始化全部資料結構。使用FastCGI,所有這些都只在進程啟動時發生一次。一個額外的好處是,持續資料庫連接(Persistent database connection)可以工作

cli  命令列運行(Command Line Interface)

##在終端機敲php script.php等命令列

web模組模式(apache等web伺服器運行的模組模式)

模組模式是以mod_php5模組的形式集成,此時mod_php5模組的作用是接收Apache傳遞過來的PHP檔案請求,並處理這些請求,然後將處理後的結果回傳給Apache,是apache在CGI的基礎上進行的一種擴展,加快PHP的運作效率。如果我們在Apache啟動前在其設定檔中配置好了PHP模組(mod_php5), PHP模組透過註冊apache2的ap_hook_post_config掛鉤,在Apache啟動的時候啟動此模組以接受PHP檔案的請求。

除了這種啟動時的載入方式,Apache的模組可以在運行的時候動態裝載,這意味著對伺服器可以進行功能擴展而不需要重新對原始碼進行編譯,甚至根本不需要停止伺服器。我們所需要做的只是給伺服器發送訊號HUP或AP_SIG_GRACEFUL通知伺服器重新載入模組。但是在動態載入之前,我們需要將模組編譯成為動態連結函式庫。此時的動態載入就是載入動態連結庫。 Apache中對動態連結函式庫的處理是透過模組mod_so來完成的,因此mod_so模組不能被動態載入,它只能被靜態編譯進Apache的核心。這意味著它是隨著Apache一起啟動的。

Apache是​​如何載入模組的呢?首先我們需要在Apache的設定檔httpd.conf中加入一行:

LoadModule php5_module modules/mod_php5.so
登入後複製

這裡我們使用了LoadModule指令,而這個指令的第一個參數是模組的名稱,名稱可以在模組實作的來源碼中找到。第二個選項是該模組所處的路徑。如果需要在伺服器執行時間載入模組,可以透過發送訊號HUP或AP_SIG_GRACEFUL給伺服器,一旦接受到該訊號,Apache將重新裝載模組,而不需要重新啟動伺服器。

以上是php在web伺服器上的運作模式詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

我後悔之前不知道的 7 個 PHP 函數 我後悔之前不知道的 7 個 PHP 函數 Nov 13, 2024 am 09:42 AM

如果您是經驗豐富的PHP 開發人員,您可能會感覺您已經在那裡並且已經完成了。操作

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? 什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

See all articles