目錄
PHP架構
#SAPI 介紹
CGI
FPM(FastCGI)
APACHE2HANDLER
CLI
#SAPI的流程
CGI模式對應的SAPI
FPM模式對應的SAPI
首頁 後端開發 PHP7 PHP7的生命週期是什麼

PHP7的生命週期是什麼

May 10, 2021 am 09:19 AM
php7 生命週期

這篇文章要為大家介紹一下PHP7的生命週期。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。

PHP7的生命週期是什麼

PHP架構

#SAPI 介紹

定義:Server Application Programming Interface服務端應用程式設計端口。他是php與其他應用程式互動的接口,php腳本要執行有很多中方式,透過web伺服器,或直接在命令列下,也可以嵌入其他程式。 SAPI提供了一個和外部通訊的接口,常見的SAPI有:cgi、fast-cgi、cli、Apache模組的dll等。

  • CGI

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

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

  • FPM(FastCGI)

       fast-cgi 是cgi的升級版本,FastCGI像是常駐(long-live)型的CGI,它可以一直執行著,只要啟動後,不會每次都要花時間去fork一次。 PHP使用PHP-FPM(FastCGI Process Manager),全名為PHP FastCGI進程管理器進行管理。

       Web Server啟動時載入FastCGI進程管理器(IIS ISAPI或Apache Module)。 FastCGI進程管理器本身初始化,啟動多個CGI解釋器進程(可見多個php-cgi)並等待來自Web Server的連線。

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

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

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

  • APACHE2HANDLER

       PHP作為Apache模組,Apache伺服器在系統啟動後,預先產生多個進程副本駐留在記憶體中,一旦有請求出現,就立即使用這些空餘的子進程進行處理,這樣就不存在生成子進程造成的延遲了。這些伺服器副本在處理完一次HTTP請求之後並不會立即退出,而是停留在電腦中等待下次請求。對於客戶瀏覽器的請求反應更快,效能較高。

  • CLI

       cli是php的命令列運作模式,大家常常會使用它,但可能沒有註意到(例如:我們在linux下經常使用「php -m」來尋找PHP安裝了那些擴充功能就是PHP命令列運行模式。

#SAPI的流程

結構體:

struct _sapi_module_struct { 
      char *name; 
      char *pretty_name;
      int (*startup)(struct _sapi_module_struct *sapi_module); 
      int (*shutdown)(struct _sapi_module_struct *sapi_module); 
      int (*activate)(void); 
      int (*deactivate)(void); 
      size_t (*ub_write)(const char *str, size_t str_length); 
      void (*flush)(void *server_context); 
     …
}
登入後複製

呼叫API :

在模組啟動時呼叫:

int (*startup)(struct _sapi_module_struct *sapi_module);
登入後複製

模組結束時呼叫:

int (*shutdown)(struct _sapi_module_struct *sapi_module);
登入後複製

處理request時呼叫:

int (*activate)(void);
登入後複製
登入後複製

處理完request呼叫:

int (*activate)(void);
登入後複製
登入後複製

CGI模式對應的SAPI

結構體:

##CLI生命週期:

#

FPM模式對應的SAPI

#結構體:

## FPM模式的生命週期:

#推薦學習:

php影片教學

以上是PHP7的生命週期是什麼的詳細內容。更多資訊請關注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)

熱門話題

Java教學
1653
14
CakePHP 教程
1413
52
Laravel 教程
1304
25
PHP教程
1251
29
C# 教程
1224
24
vue3改了幾個生命週期函數 vue3改了幾個生命週期函數 Jan 13, 2023 pm 05:57 PM

vue3改了4個生命週期函數。 Vue3組合式api取消了beforeCreated和created鉤子函數,採用steup鉤子代替,且裡面不能使用this。 Vue3裡面的組件銷毀的鉤子函數由destroyed和beforeDestroy換成了beforeUnmount和unmounted。

servlet生命週期分成幾個階段 servlet生命週期分成幾個階段 Feb 23, 2023 pm 01:46 PM

Servlet生命週期是指servlet從創建到毀滅的整個過程,可分為3個階段:1、初始化階段,呼叫init()方法實作Servlet的初始化工作;2、運行階段(處理請求),容器會為指定請求建立代表HTTP請求的ServletRequest對象和代表HTTP回應的ServletResponse對象,然後將它們作為參數傳遞給Servlet的service()方法;3、銷毀階段。

如何處理 C++ 函數指標的析構與生命週期管理? 如何處理 C++ 函數指標的析構與生命週期管理? Apr 17, 2024 pm 05:48 PM

在C++中,函數指標需要適當的析構和生命週期管理。可以透過以下方式實現:手動析構函數指針,釋放記憶體。使用智慧指針,如std::unique_ptr或std::shared_ptr,自動管理函數指標的生命週期。將函數指標綁定到對象,對像生命週期管理函數指標的析構。在GUI程式設計中,使用智慧指標或綁定到物件可確保回呼函數在適當的時候被析構,避免記憶體洩漏和不一致。

php7.0安裝了插件還是顯示未安裝怎麼辦 php7.0安裝了插件還是顯示未安裝怎麼辦 Apr 02, 2024 pm 07:39 PM

解決 PHP 7.0 中插件未顯示已安裝問題的方法:檢查插件配置並啟用插件。重新啟動 PHP 以套用配置變更。檢查插件檔案權限,確保其正確。安裝遺失的依賴項,以確保插件正常運作。如果其他步驟都失敗,則重建 PHP。其他可能原因包括外掛程式版本不相容、載入錯誤版本或 PHP 配置問題。

Vue3中的生命週期函數:快速掌握Vue3的生命週期 Vue3中的生命週期函數:快速掌握Vue3的生命週期 Jun 18, 2023 am 08:20 AM

Vue3是目前前端界最熱門的框架之一,而Vue3的生命週期函數是Vue3中非常重要的一部分。 Vue3的生命週期函數可以讓我們實現在特定的時機觸發特定的事件,增強了元件的高度可控性。本文將從Vue3的生命週期函數的基本概念、各個生命週期函數的作用和使用方法以及實現案例等方面進行詳細探究和講解,幫助讀者快速掌握Vue3的生命週期函數。一、Vue3的生命週期函數的

uniapp實作如何手動觸發元件的生命週期鉤子函數 uniapp實作如何手動觸發元件的生命週期鉤子函數 Oct 21, 2023 am 11:04 AM

Uniapp是一款跨平台的應用程式開發框架,可同時建構iOS、Android和Web應用。在應用開發過程中,組件的生命週期鉤子函數是非常重要的一部分,它們用於在特定的時間節點執行相應的操作。通常,元件的生命週期函數是在特定的事件觸發下自動執行的,例如頁面載入完成、元件進入視圖、元件從視圖中移除等。但是,有時我們需要手動觸發組件的生命週期鉤子函數,以便達到特定的

php7.0怎麼安裝mongo擴展 php7.0怎麼安裝mongo擴展 Nov 21, 2022 am 10:25 AM

php7.0安裝mongo擴充的方法:1、建立mongodb使用者群組和使用者;2、下載mongodb原始碼包,並將原始碼包放到“/usr/local/src/”目錄下;3、進入“src/”目錄;4、解壓縮原始碼包;5、建立mongodb檔案目錄;6、將檔案複製到「mongodb/」目錄;7、建立mongodb設定檔並修改設定即可。

php7檢測tcp埠不好用怎麼解決 php7檢測tcp埠不好用怎麼解決 Mar 22, 2023 am 09:30 AM

在php5中,我們可以使用fsockopen()函數來偵測TCP埠。這個函數可以用來開啟一個網路連接和進行一些網路通訊。但是在php7中,fsockopen()函數可能會遇到一些問題,例如無法開啟連接埠、無法連接到伺服器等。為了解決這個問題,我們可以使用socket_create()函數和socket_connect()函數來偵測TCP埠。

See all articles