php的擴展和嵌入–總綱

初步接觸瞭php開發以及php擴展的相關內容,發現extending and embeded php這本書很不錯,很多問題也講的非常透徹。這裡把讀到的一些書中的內容和自己的實踐結合起來展示一下,既是給自己留檔,也是拋磚引玉,期待php大牛的指導。

extending and embeded php這本書還有一個中文版,有些東西新一些,也可以參考下:

https://www.walu.cc/phpbook/preface.md

這本書主要講兩個方面:

  • 如何通過添加函數、類、資源和流的方式來擴展php

  • 如何把php語言嵌入到其他應用中去
    那麼為什麼需要php擴展呢?:

    • 連接額外的庫,並以api的形式提供給用戶空間的腳本。比如被封裝好的mysql
      • 是在第三方的庫和php的核心之間提供一種擴展,因此php被稱為是膠水語言
      • 進行特殊的內部操作,比如聲明超級變量,用戶空間因為安全原因是有限制的。比如php的advanced php debugger 和runkit主要就是幹這個的
      • 速度原因:令牌化、編譯、運行,Opcode可以縮減前兩步,但是執行這一步的話還是變成C code比較好。
      • 在不暴露出源碼的情況下提供功能

        下圖中給出瞭php的總體結構:

        其中各部分模塊的功能如下:

        SAPI:是跟web server的接口層

        PHP Core:對於核心事件的連接層,處理類似於文件處理、錯誤處理這類操作

        Zend Engine:把腳本編譯成機器語言,執行bytecode,讀入寫出用戶空間變量,控制程式流,解析擴展。

        TSRM:thread safe resource management:使得一個單個的php實例具有能夠同時處理很多獨立的請求的能力

        這本書分成瞭三個部分,第一個部分是對php的重新介紹,主要敘述瞭php的解釋器如何黏合在一起。第二個部分則主要在講php的擴展,所涉及的方面如下:

        • PHP API 一些php內部的函數和宏
        • 如何把php腳本轉換成c code:每個php的腳本的背後都牽涉到瞭c語言的相應處理,這種對應關系對擴展的開發十分有用
        • 執行那些用戶空間不可能的操作:很多時候需要執行一些類似於超級變量這種在用戶態無法完成的動作,這個時候需要利用擴展進行相應的處理。
          而第三個部分則是敘述如何把php嵌入到相應的應用中去:

          • 首先是給應用加上相應的php支持
          • 其次是充分利用php相應的安全特性
          • 最後則是說明php如何同時處理多個請求
            由於剛剛開始學習php,所以一些錯誤再所難免,請一定指正。

You May Also Like