PHP7核心剖析 SAPI簡析

2021-09-29 18:30:24 字數 1852 閱讀 8918

前言:首先,從個人的角度來說一下關於sapi這章吧!這章內容大多其實是講了一些c語言的函式實現部分,之前若是沒有c基礎的同學,看起來可能會比較吃力,所以我的建議是,不用去通讀裡面的關鍵**,首先我們對這些函式有乙個影響,知道乙個大概即可,後期有時間可以先了解一下c之後,再過來開這塊,個人感覺會比較輕鬆!!!

先來說一下什麼是sapi?

sapi是服務端應用層的介面,即php與其他應用互動的介面。要執行php指令碼有很多種方式,例如通過web伺服器,或者直接在命令列下,也可以嵌入在其他程式中。

在php中sapi常見的有四種,即cli,cgi,fpm,embed

1.cli:英文:command-line inte***ce,翻譯過來就是「命令列介面」。它在php中主要是用來方便直接執行php檔案的,當你想做簡單的除錯的時候,這種方式無疑是最好的選擇了。再來說一下cli內部的機制。首先cli是單程序模式,也就是說,cli請求完就關閉了。再來說他的生命週期,這個我在上篇文章中就說到了,沒看的同學請移步傳送門。那cli也是按照這個生命週期去執行的:

2.cgi:

cgi (commom gateway inte***ce),通用閘道器介面,它把網頁和web伺服器中的執行程式連線起來,把從html接收的指令傳遞給伺服器的執行程式,再把伺服器執行程式的結果返還給html頁。cgi的跨平台效能極佳,幾乎可以在任何作業系統上實現。cgi方式在遇到連線請求先要建立cgi的子程序,啟用乙個cgi程序,然後處理請求,處理完後結束這個子程序。這就是fork-and-execute模式。所以用cgi方式的伺服器有多少連線請求就會有多少cgi子程序,子程序反覆載入是cgi效能低下的主要原因。都會當使用者請求數量非常多時,會大量擠占系統的資源如記憶體,cpu時間等,造成效能低下。

3.fpm:(fastcgi process manager),php fastcgi 程序管理器。說到fpm,就不得不先說一下fastcgi。首先來說,fastcgi本質是乙個類似於http的協議,在php中它配合web一起實現http請求。fastcgi 是 cgi的公升級版本,fastcgi可以看成是乙個常駐型的cgi,它可以一直執行著,只要啟用後,不會每次都要花費時間去fork一次。接著說fpm,fpm是怎麼去管理程序的呢?首先在初始化的時候,它會生成乙個master主程序與多個worker子程序。master主要用來管理worker程序,而worker程序則用來處理請求。master在管理worker的時候,會用3種不同的策略去管理:static(靜態),dynamic(動態),ondemand(按需)。static是每次fork固定的子程序(pm.max_children起始php-fpm程序數量);dynamic是動態的去fork子程序(pm.start_servers:起始php-fpm程序數量pm.min_spare_servers:最小php-fpm程序數pm.max_spare_servers:最大php-fpm程序數量);ondemand就是你需要多少就fork多少子程序。值得注意的是,當子程序過多的時候,master也會去kill掉部分子程序,kill的策略是最長時間沒有使用到的子程序,而且每個週期只能kill乙個,若是空餘子程序較多的話,也是乙個週期kill乙個子程序的!

4.embed:嵌入,主要是用來將php作為介面向第三方提供的。編譯php時通過 --enable-embed=[shared|static]指定庫型別,預設是共享庫。

小結:cli主要用於命令列,fpm主要用於web端應用,emben主要用於第三方語言或者應用。

讀《PHP7 核心剖析》

自己的書,在書上做筆記了。一本不錯的書,寫的算是詳細了。書中簡要介紹了各種功能的 c 語言實現的方法名稱。一,php 基礎架構 二,sapi 3 種執行 php 的方式。三,資料型別 四,記憶體管理 執行緒安全 五,php 編譯與執行 六,函式 七,物件導向 類的自動載入,255頁 autoload...

PHP7核心剖析 PHP 函式

今天看一下php7中的函式相關的一點兒知識。首先來說,php的函式分為使用者自定義函式與內部函式兩類,先看一下使用者自定義函式。通過前面的文章,我們知道了php在編譯執行的時候,會將php指令碼解釋稱opline指令。那同樣的,php中函式也是被編譯成了opline指令集合zend op array...

PHP核心剖析 常見的SAPI及Embed

參考文獻 php7核心剖析 秦鵬 著 sapi提供了乙個和外部通訊的介面,常見的sapi有 cgi fast cgi cli isapi apache 模組的 dll 目錄 1 常見的sapi介紹 2 embed 2.1 php embed init 2.2 php embed shutdown c...