搜尋
首頁後端開發php教程帶你認識PHP運行模式

帶你認識PHP運行模式

Feb 22, 2021 am 09:15 AM
php

推薦:《PHP影片教學

PHP有五種運作模式,常見的有4種:

1.CGI(通用網關介面/ Common Gateway Interface)
2.FastCGI(常駐型CGI / Long-Live CGI)
3.CLI(命令列運行/ Command Line Interface)
4.LoadModule 【Apache獨有】
5.ISAPI(Internet Server Application Program Interface)【IIS獨有】

備註:在PHP5.3以後,PHP不再有ISAPI模式,安裝後也不再有php5isapi.dll這個檔案。要在IIS6上使用高版本PHP,必須安裝FastCGI 擴展,然後使IIS6支援FastCGI。

查看目前運行模式
echo php_sapi_name();

CGI模式

##介紹:

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

呼叫過程:Fork-And-Execute模式

使用者要求 —> web伺服器接收請求【常用Nginx、apache】—> fork CGI的子進程&處理請求—-> 請求處理完畢,返回結果到web伺服器&銷毀子程序—>web伺服器回傳結果給使用者

圖解:
帶你認識PHP運行模式


優點:

作為PHP最早的運作模式,每次請求都獨立處理,呼叫過程夠簡單清晰,可控性強進程間是隔離的,保證資料不會被污染

劣勢:
每次請求都需要fork一個新的CGI子進程,假如同一時間並發請求一千,意味著就要fork一千個子進程,這就會導致幾個問題:

fork子進程需要時間,需要佔用記憶體【copy-on-write】

子進程過多,會導致CPU將大量的時間花費在上下文切換上

每次請求需要重新載入相關資源
帶你認識PHP運行模式
FastCGI模式

    介紹:
  1. FastCGI是CGI的升級版本,FastCGI像是常駐(long-live)型的CGI,在啟動web伺服器的時候載入FastCGI進程管理器【PHP- FPM、IIS ISAPI、Apache Module】,當有請求過來的時候,web伺服器只需要交給FastCGI進程管理器處理即可。
  2. 呼叫過程:以PHP-FPM 為例

web伺服器啟動的時候啟動PHP-FPM master進程(主要負責分配請求給空閒的自子進程處理)以及一定數量的fast-cgi子程序(負責處理請求)。 PHP-FPM  master進程管理一個進程池,池裡有若干個fast-cgi子進程,每個fast-cgi子進程單獨處理一個請求,互不干涉。 用戶請求—> web伺服器接收請求【常用Nginx、apache】—> 偵測到是PHP請求&轉送給FPM master程序 —>  FPM master程序指定空閒fast-cgi子程序處理請求—> 子程序載入文件(如php.ini)及其他資源處理請求 —>  處理結束&清除資源,結果回傳master & 子程序掛起,標記為空閒—>  master 將結果傳回web伺服器— >web伺服器傳回結果給使用者

######圖解:################優勢:###########從穩定性上看,FastCGI是以獨立的進程池來運行CGI,單獨一個進程死掉,系統可以很輕易的丟棄,然後重新分配新的進程來運行邏輯######從安全性上看,FastCGI和宿主的web Server完全獨立,FastCGI 不會影響web 伺服器的運作【如果PHP-FPM處於關閉狀態,則會回傳502 bad gateway 給使用者】######從效能上看,FastCGI把動態邏輯的處理從web Server中分離出來,大負荷的IO處理還是留給宿主Server,這樣宿主Server可以一心一意作IO【對於一個普通的動態網頁來說, 邏輯處理可能只有一小部分,更多的是圖片等靜態資源的載入】############劣勢:######

一個fast-cgi子程序同一時間只能處理一個請求,所以網站的並發效能就受限於子程序數
如果開啟的行程過多,會導致CPU將大量的時間浪費在行程的上下文切換上。
每次要求fast-cgi子程序都需要重新載入相關資源,請求結束需要釋放資源

CLI(命令列運行/ Command Line Interface)

簡介:

php-cli模式屬於命令列模式,對於許多剛開始學php就開始wamp,wnmp的開發者來說是最陌生的一種運行模式
此模式不需要藉助其他程式,直接輸入php xx.php 就能執行php程式碼
命令列模式和常規web模式明顯不一樣的是:
沒有超時時間
預設關閉buffer緩衝
STDIN和STDOUT標準輸入/輸出/錯誤的使用
echo var_dump,phpinfo等輸出直接輸出到控制台
可使用的類別/函數不同
php.ini配置的不同

PS:詳見官方文件:www.php.net/manual/zh/features.com...

LoadModule(Apache獨有)

#簡介:
模組模式是以mod_php5模組的形式集成,此時mod_php5模組的作用是接收Apache傳遞過來的PHP檔案請求,並處理這些請求,然後將處理後的結果傳回Apache 。
在Apache設定檔httpd.conf裡,通常加的LoadModule php7_module “D:/…/php71/php7apache2_4.dll”起到的作用就是這個

調用過程:

使用者請求—>  Apache 伺服器—>  呼叫mod_php5模組處理請求—> 回傳請求結果給Apache —> Apache 回傳結果給使用者

#圖解:
帶你認識PHP運行模式

ISAPI(Internet Server Application Program Interface)

簡介:

在PHP5. 3以後,PHP不再有ISAPI模式,安裝後不再有php5isapi.dll這個檔案。要在IIS6上使用高版本PHP,必須安裝FastCGI 擴展,然後使IIS6支援FastCGI。故此處不做過多介紹

圖解:
帶你認識PHP運行模式

#寫在最後:

在在網路爆炸式發展的今天,絕大多數網站都需要考慮網站的高同時效能。 Nginx由於其輕量和出色的並發性能等優點,越來越多的受到開發者的青睞。曾經火爆全網的 LAMP 組合已不是PHP開發者的第一選擇,異軍突起的 LNMP 組合已然成為 PHPer 的必修課,這導致基於 Apache 的LoadModule模式已越來越少被提及。
除此之外,用來寫入命令列腳本CLI模式和幾乎絕跡的 ISAPI 模式顯然不適合建立網站。
作為CGI 加強版的Fast-CGI 模式在繼承了CGI 簡單、安全的基礎上,使用PHP-FPM管理子進程,使得web伺服器更加專注的處理I/O,PHP-FPM管理維護一個進程池,可提前fork 一定數量的子程序等待處理請求,既不用在請求到來時才fork子進程,也不用在請求結束時就銷毀子進程。

以上是帶你認識PHP運行模式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:learnku。如有侵權,請聯絡admin@php.cn刪除
簡單地說明PHP會話的概念。簡單地說明PHP會話的概念。Apr 26, 2025 am 12:09 AM

phpsessionstrackuserdataacrossmultiplepagerequestsusingauniqueIdStoredInAcookie.here'showtomanageThemeffectionaly:1)startAsessionWithSessionWwithSession_start()和stordoredAtain $ _session.2)

您如何循環中存儲在PHP會話中的所有值?您如何循環中存儲在PHP會話中的所有值?Apr 26, 2025 am 12:06 AM

在PHP中,遍歷會話數據可以通過以下步驟實現:1.使用session_start()啟動會話。 2.通過foreach循環遍歷$_SESSION數組中的所有鍵值對。 3.處理複雜數據結構時,使用is_array()或is_object()函數,並用print_r()輸出詳細信息。 4.優化遍歷時,可採用分頁處理,避免一次性處理大量數據。這將幫助你在實際項目中更有效地管理和使用PHP會話數據。

說明如何使用會話進行用戶身份驗證。說明如何使用會話進行用戶身份驗證。Apr 26, 2025 am 12:04 AM

會話通過服務器端的狀態管理機制實現用戶認證。 1)會話創建並生成唯一ID,2)ID通過cookies傳遞,3)服務器存儲並通過ID訪問會話數據,4)實現用戶認證和狀態管理,提升應用安全性和用戶體驗。

舉一個如何在PHP會話中存儲用戶名的示例。舉一個如何在PHP會話中存儲用戶名的示例。Apr 26, 2025 am 12:03 AM

Tostoreauser'snameinaPHPsession,startthesessionwithsession_start(),thenassignthenameto$_SESSION['username'].1)Usesession_start()toinitializethesession.2)Assigntheuser'snameto$_SESSION['username'].Thisallowsyoutoaccessthenameacrossmultiplepages,enhanc

哪些常見問題會導致PHP會話失敗?哪些常見問題會導致PHP會話失敗?Apr 25, 2025 am 12:16 AM

PHPSession失效的原因包括配置錯誤、Cookie問題和Session過期。 1.配置錯誤:檢查並設置正確的session.save_path。 2.Cookie問題:確保Cookie設置正確。 3.Session過期:調整session.gc_maxlifetime值以延長會話時間。

您如何在PHP中調試與會話相關的問題?您如何在PHP中調試與會話相關的問題?Apr 25, 2025 am 12:12 AM

在PHP中調試會話問題的方法包括:1.檢查會話是否正確啟動;2.驗證會話ID的傳遞;3.檢查會話數據的存儲和讀取;4.查看服務器配置。通過輸出會話ID和數據、查看會話文件內容等方法,可以有效診斷和解決會話相關的問題。

如果session_start()被多次調用會發生什麼?如果session_start()被多次調用會發生什麼?Apr 25, 2025 am 12:06 AM

多次調用session_start()會導致警告信息和可能的數據覆蓋。 1)PHP會發出警告,提示session已啟動。 2)可能導致session數據意外覆蓋。 3)使用session_status()檢查session狀態,避免重複調用。

您如何在PHP中配置會話壽命?您如何在PHP中配置會話壽命?Apr 25, 2025 am 12:05 AM

在PHP中配置會話生命週期可以通過設置session.gc_maxlifetime和session.cookie_lifetime來實現。 1)session.gc_maxlifetime控制服務器端會話數據的存活時間,2)session.cookie_lifetime控制客戶端cookie的生命週期,設置為0時cookie在瀏覽器關閉時過期。

See all articles

熱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

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

熱工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具