深入理解PHP核心(二)概覽-PHP生命週期與Zend引擎,-phpzend_PHP教程

來源:互聯網
上載者:User

深入理解PHP核心(二)概覽-PHP生命週期與Zend引擎,-phpzend


本文參考自《深入理解PHP核心》,地址:https://github.com/reeze/tipi

1、SAPI介面

SAPI(Server Application Programming Interface)指的是PHP具體應用的編程介面。PHP指令碼要執行可以用很多種方式:通過web伺服器、命令列、嵌入到其他程式中。

雖然通過web伺服器和命令列程式執行指令碼看起來很不一樣,但是實際的流程是一樣的。只不過是web伺服器方式是將php指令碼執行結果返回給web伺服器,命令列是將結果列印到控制台。

指令碼執行的開始都是以SAPI介面實現開始的,只是不同的SAPI介面實現會完成他們特定的工作,例如Apache的mod_php SAPI實現需要初始化從Apache擷取的一些資訊,在輸出內容是將內容返回給Apache,其他SAPI實現也類似

2、開始和結束

(1)PHP開始執行後會經過兩個階段:處理請求之前的開始階段和請求之後的結束階段。開始階段有兩個過程:第一個過程是模組初始化階段(MINIT),在整個SAPI生命週期內(例如Apache啟動之後的整個生命週期或者命令列程式整個執行過程中),該過程只進行一次。第二個過程是模組啟用階段(RINIT),該過程發生在要求階段,例如通過url請求某個頁面,則在每次請求之前都會進行模組啟用(RINIT請求開始)。例如PHP註冊了一些擴充模組,則在MINIT階段回調所有模組的MINIT函數。模組在這個階段進行一些初始化工作,例如註冊常量,定義模組使用的類等等。模組在實現時可以通過如下宏來實現這些回呼函數:

PHP_MINIT_FUNCTION(myphpextension){    // 註冊常量或者類等初始化操作    return SUCCESS;      }

請求到達之後PHP初始化指令碼的基本環境,例如建立一個執行環境,包括儲存PHP運行過程中變數名稱和值內容的符號表,以及當前所有的函數以及類等資訊的符號表。然後PHP會調用所有模組的RINIT函數,在這個階段各個模組也可以執行一些相關的操作,模組RINIR函數和MINIT回呼函數類似:

PHP_RINIT_FUNCTION(myphpextension){    // 例如記錄請求開始時間    // 隨後在請求結束的時候記錄結束時間,這樣我們就能記錄下處理請求所花費的時間了    return SUCCESS;}

請求處理完之後就進入結束階段,一般指令碼執行到末尾或者通過調用die()或exit()函數,PHP都將進入結束階段。結束階段也有兩個環節:一個在請求結束後停用模組(RSHUTDOWN,對應RINIT),一個在SAPI生命週期結束(web伺服器退出或者命令列指令碼執行完畢退出)時關閉模組(MSHUTDOWN,對應MINIT)。

PHP_RSHUTDOWN_FUNCTION(myphpextension){    // 例如記錄請求結束時間,並把相應的資訊寫入到記錄檔中    return SUCCESS;}

(2)單進程SAPI生命週期

CLI/CGI模式的PHP屬於單進程的SAPI模式。這類請求在處理一次請求後就關閉了。SAPI生命週期:開始-請求開始-請求關閉-結束

(3)多進程SAPI生命週期

通常PHP編譯成Apache的一個模組,Apache通常採用多進程模式,Apache啟動後會fork出多個子進程,每個進程的記憶體空間獨立,每個子進程都會經過開始和結束環節,不過每個進程的開始階段只在進程fork出來以後進行,在整個進程的生命週期內可能有可能處理多個請求。只有在Apache關閉或者進程被結束之後才進行關閉階段,在這兩個階段會隨著每個請求重複請求開始-請求關閉的環節

(4)多線程模式和多進程中的某個進程類似,不同的是在整個進程的生命週期內會並行的重複著請求開始-請求關閉的環節。

3、Zend引擎

Zend引擎是PHP實現的核心,提供了語言實現上的基礎設施。例如PHP文法的實現、指令碼的編譯運行環境、擴充機制以及記憶體管理等。這裡的PHP指的是官方的PHP實現(另外還有facebook的Hiphop,現已發展成為HHVM,到目前為止(此項目)PHP還沒有一個標準的語言規範),而PHP則提供了請求處理和其他Web伺服器的介面(SAPI)

http://www.bkjia.com/PHPjc/1095119.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1095119.htmlTechArticle深入理解PHP核心(二)概覽-PHP生命週期與Zend引擎,-phpzend 本文參考自《深入理解PHP核心》,地址:https://github.com/reeze/tipi 1、SAPI介面 SAPI(Serve...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.