国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PHP回顧之執(zhí)行流程及相關(guān)概念

jsdt / 3256人閱讀

摘要:通過(guò),腳本層無(wú)需過(guò)多考慮執(zhí)行的具體環(huán)境,而本身則可以讓針對(duì)自己的特點(diǎn)給出特有實(shí)現(xiàn)。模式下,也只執(zhí)行一次。這幾個(gè)概念的關(guān)系如下網(wǎng)關(guān)協(xié)議,與語(yǔ)言無(wú)關(guān),所以與關(guān)系也不大。總結(jié)本文簡(jiǎn)要回顧了程序的架構(gòu)和執(zhí)行流程,并對(duì)幾個(gè)容易混淆概念做了介紹。

轉(zhuǎn)載請(qǐng)注明文章出處:https://tlanyan.me/php-review...
PHP回顧系列目錄

PHP基礎(chǔ)

web請(qǐng)求

cookie

web響應(yīng)

session

數(shù)據(jù)庫(kù)操作

加解密

Composer

創(chuàng)建自己的Composer包

發(fā)送郵件

IO

Socket編程

多進(jìn)程編程

本文總結(jié)PHP的執(zhí)行流程以及相關(guān)概念。

程序架構(gòu)

先看看運(yùn)行一個(gè)PHP程序需要哪些支撐。一切的起點(diǎn),要從程序員開(kāi)始寫PHP才有意義,所以應(yīng)用層面的PHP腳本文件(包括Composer/include的各種第三方PHP代碼)是必須的。腳本文件要解析編譯后才能執(zhí)行,所以PHP虛擬機(jī)(通常是Zend引擎)也是必備的。此外PHP腳本中會(huì)使用多個(gè)拓展中的函數(shù)和類,所以拓展(包括官方、PECL、以及用戶自行寫的拓展)幾乎也是必備的。另外PHP程序要與外部交互(例如從命令行獲取參數(shù)、從web服務(wù)器獲取請(qǐng)求信息),這一層由SAPI負(fù)責(zé),所以SAPI也是必須的。

總結(jié)以上,PHP程序的架構(gòu)從上往下看有四層,分別是:應(yīng)用層、SAPI層、拓展層和Zend引擎。架構(gòu)關(guān)系見(jiàn)下圖:

(圖片來(lái)源:http://www.nowamagic.net/libr...)

SAPI層對(duì)某些人可能相對(duì)陌生。SAPI提供一套統(tǒng)一的接口,讓上層應(yīng)用程序與實(shí)際運(yùn)行環(huán)境解耦。用戶寫的PHP文件,可以用命令行執(zhí)行,也可以在Apache httpd或FPM中執(zhí)行。背后的支持工作由SAPI提供,開(kāi)發(fā)人員無(wú)感知。通過(guò)SAPI,PHP腳本層無(wú)需過(guò)多考慮執(zhí)行的具體環(huán)境,而PHP本身則可以讓SAPI針對(duì)自己的特點(diǎn)給出特有實(shí)現(xiàn)。

執(zhí)行流程

拋開(kāi)各個(gè)SAPI實(shí)現(xiàn)上的差異,PHP程序的執(zhí)行流程可以簡(jiǎn)單歸結(jié)如下:

程序啟動(dòng),Zend引擎和核心組件初始化;

拓展初始化(MINIT);

收到請(qǐng)求,拓展激活(RINIT);

解析、執(zhí)行PHP腳本;

請(qǐng)求結(jié)束,拓展停用(RSHUTDOWN);

卸載拓展(MSHUTDOWN);

程序關(guān)閉

除345,其余幾步在整個(gè)SAPI生命周期中只會(huì)執(zhí)行一次。CGI/CLI模式下,345也只執(zhí)行一次。

理解PHP程序的生命周期,是PHP進(jìn)階的必備過(guò)程,也能幫助開(kāi)發(fā)人員快速定位問(wèn)題。例如腳本報(bào)函數(shù)不存在,很有可能是某個(gè)拓展缺失或加載出錯(cuò);在CLI/CGI模式下,再怎么pconnect也是徒勞的,腳本一執(zhí)行完資源就釋放掉;exit/die終止的是腳本的執(zhí)行,不一定意味著進(jìn)程的結(jié)束;腳本編譯后常駐內(nèi)存,不會(huì)反復(fù)執(zhí)行RINIT和RSHUTDOWN,是CLI框架相對(duì)于其他運(yùn)行模式的性能提升點(diǎn);等等。

SAPI生命周期中各個(gè)階段的更多細(xì)節(jié),請(qǐng)參考《深入理解PHP內(nèi)核》一書。

CGI、FastCGI、PHP-FPM等

CGI/FastCGI/php-cgi和PHP-FPM是幾個(gè)容易讓PHP開(kāi)發(fā)人員困惑和混淆的概念。這幾個(gè)概念的關(guān)系如下:

CGI/FastCGI:網(wǎng)關(guān)協(xié)議,與語(yǔ)言無(wú)關(guān),所以與PHP關(guān)系也不大。兩者的區(qū)別是FastCGI可以獨(dú)立于web服務(wù)器,運(yùn)行FastCGI協(xié)議的程序變成web服務(wù)器的內(nèi)容提供方(上游)。另外與web服務(wù)器解耦后,用FastCGI協(xié)議交互的進(jìn)程具有性能好、安全穩(wěn)定、支持分布式等優(yōu)點(diǎn);

php-cgi:實(shí)現(xiàn)FastCGI協(xié)議的PHP解析器,不能平滑重啟和熱加載;

FPM:PHP官方的FastCGI進(jìn)程管理器,可執(zhí)行程序?yàn)閜hp-fpm;支持平滑重啟、熱加載,運(yùn)行穩(wěn)定;其管理對(duì)象不是php-cgi進(jìn)程,兩者沒(méi)什么關(guān)系。

僅是幾個(gè)概念比較容易容易區(qū)分,實(shí)際上混淆開(kāi)發(fā)人員的是以下四組概念的綜合:

web服務(wù)器。常見(jiàn)的Apache httpd和Nginx;

SAPI。常見(jiàn)的是apache2handler、cli、fpm-fcgi;

協(xié)議。文中提到的CGI和FastCGI;

程序。即php-cgi和php-fpm。

由于web服務(wù)器對(duì)大多數(shù)人更熟悉,拿之說(shuō)一下與其他概念的關(guān)系:使用Apache httpd時(shí),90%以上的情況以模塊方式執(zhí)行PHP腳本,所以與SAPI中的apache2handler有關(guān),與其他概念無(wú)關(guān)(既不是CGI也不是FastCGI協(xié)議);使用Nginx時(shí),90%的情況是通過(guò)FastCGI協(xié)議將請(qǐng)求轉(zhuǎn)發(fā)到FPM,所以與SAPI中的fpm-fcgi、協(xié)議中的FastCGI、程序中的php-fpm三個(gè)概念有關(guān),與其他概念無(wú)關(guān)。

總結(jié)

本文簡(jiǎn)要回顧了PHP程序的架構(gòu)和執(zhí)行流程,并對(duì)幾個(gè)容易混淆概念做了介紹。

感謝閱讀,歡迎指正!

參考

http://www.php-internals.com/...

http://www.nowamagic.net/libr...

http://cuishan.win/2017/02/05...

http://www.mike.org.cn/articl...

https://www.kancloud.cn/nickb...

http://php.net/manual/en/inst...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/28942.html

相關(guān)文章

  • PHP回顧協(xié)程

    摘要:本文先回顧生成器,然后過(guò)渡到協(xié)程編程。其作用主要體現(xiàn)在三個(gè)方面數(shù)據(jù)生成生產(chǎn)者,通過(guò)返回?cái)?shù)據(jù)數(shù)據(jù)消費(fèi)消費(fèi)者,消費(fèi)傳來(lái)的數(shù)據(jù)實(shí)現(xiàn)協(xié)程。解決回調(diào)地獄的方式主要有兩種和協(xié)程。重點(diǎn)應(yīng)當(dāng)關(guān)注控制權(quán)轉(zhuǎn)讓的時(shí)機(jī),以及協(xié)程的運(yùn)作方式。 轉(zhuǎn)載請(qǐng)注明文章出處: https://tlanyan.me/php-review... PHP回顧系列目錄 PHP基礎(chǔ) web請(qǐng)求 cookie web響應(yīng) sess...

    Java3y 評(píng)論0 收藏0
  • PHP回顧創(chuàng)建自己的Composer包

    摘要:想要更好的利用協(xié)同工作,學(xué)會(huì)創(chuàng)建自己的包是一項(xiàng)必不可少的技能。編輯項(xiàng)目的或,增加一項(xiàng)配置,例如以上配置使用中國(guó)全量鏡像網(wǎng)站作為默認(rèn)中央倉(cāng)庫(kù)。創(chuàng)建自己的包創(chuàng)建一個(gè)包只需兩步填寫包描述信息寫代碼。通過(guò)簡(jiǎn)單兩步,我們創(chuàng)建的自己的包。 轉(zhuǎn)載請(qǐng)注明文章出處:https://tlanyan.me/php-review... PHP回顧系列目錄 PHP基礎(chǔ) web請(qǐng)求 cookie web響應(yīng) ...

    KoreyLee 評(píng)論0 收藏0
  • PHP回顧發(fā)送郵件

    摘要:隨著云服務(wù)器的盛行,幾乎無(wú)法以指向本機(jī)的域名向外發(fā)送郵件,除了在本機(jī)內(nèi)發(fā)送提醒郵件,用處已然不大。發(fā)送效率低非面向?qū)ο蟮恼{(diào)用方式,配置麻煩以及云服務(wù)器廠商的封鎖,是使用函數(shù)的最大阻礙。 轉(zhuǎn)載請(qǐng)注明文章出處: https://tlanyan.me/php-review... PHP回顧系列目錄 PHP基礎(chǔ) web請(qǐng)求 cookie web響應(yīng) session 數(shù)據(jù)庫(kù)操作 加解密 Co...

    smallStone 評(píng)論0 收藏0
  • SegmentFault D-Day 2016 「北京:后端」 活動(dòng)回顧

    摘要:今年從北京站開(kāi)始,分享主題與后端相關(guān)。嘉賓匯總高馳濤性能之路姜季廷的前后之道孫宏亮生態(tài)中的現(xiàn)狀與實(shí)踐信海龍異步化探索今年還會(huì)在其他九個(gè)城市巡回分享,感謝大家的關(guān)注與分享。 今年 SegmentFault D-Day 從北京站開(kāi)始,分享主題與「后端」相關(guān)。當(dāng)然,我們還會(huì)在其他九個(gè)城市巡回分享,歡迎大家關(guān)注,幫忙擴(kuò)散。 開(kāi)場(chǎng)介紹 首先是 youku 美女星宇對(duì) SegmentFault 社...

    PingCAP 評(píng)論0 收藏0
  • SegmentFault D-Day 2016 「北京:后端」 活動(dòng)回顧

    摘要:今年從北京站開(kāi)始,分享主題與后端相關(guān)。嘉賓匯總高馳濤性能之路姜季廷的前后之道孫宏亮生態(tài)中的現(xiàn)狀與實(shí)踐信海龍異步化探索今年還會(huì)在其他九個(gè)城市巡回分享,感謝大家的關(guān)注與分享。 今年 SegmentFault D-Day 從北京站開(kāi)始,分享主題與「后端」相關(guān)。當(dāng)然,我們還會(huì)在其他九個(gè)城市巡回分享,歡迎大家關(guān)注,幫忙擴(kuò)散。 開(kāi)場(chǎng)介紹 首先是 youku 美女星宇對(duì) SegmentFault 社...

    xushaojieaaa 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<