2018.01.03 周三--【技術(shù)文章】《PHP擴(kuò)展及核心》

一、主要內(nèi)容:

1??php擴(kuò)展的概念和底層實(shí)現(xiàn)

2??編寫(xiě)一個(gè)php擴(kuò)展的步驟

3??php底層,Zend 引擎API的介紹 ,HashTable?原理

二、相關(guān)概念

? ? 1.【php擴(kuò)展】


php的插件,也就是php的擴(kuò)展,因?yàn)閜hp的底層就是C語(yǔ)言。

php –m 或者 php –i 都可以查看擴(kuò)展。

其實(shí),xhproh, curl都是php的擴(kuò)展。


php的擴(kuò)展圖phpinfo()

2.【為什么要有擴(kuò)展?】


1)【效率高】復(fù)雜的圖像算法,需要寫(xiě)成PHP擴(kuò)展

2)【操作底層,未支持的技術(shù)】1)PHP需要支持一項(xiàng)她還未支持的技術(shù)。這通常包括包裹一些現(xiàn)成的C函數(shù)庫(kù),以便提供PHP接口。 2)有些系統(tǒng)調(diào)用不能用PHP直接訪問(wèn),需要編寫(xiě)成擴(kuò)展,比如使用Linux下的fork()函數(shù)創(chuàng)建一個(gè)進(jìn)程。

3)【商業(yè)化,保護(hù)源碼】想商業(yè)話一個(gè)應(yīng)用,但是又不想暴露源代碼,就可以編寫(xiě)成擴(kuò)展。


3.【PHP核心組成?】


Zend引擎:1)核心、基礎(chǔ)設(shè)施 2)PHP語(yǔ)法實(shí)現(xiàn) 3)腳本編譯執(zhí)行 4)擴(kuò)展機(jī)制 5)內(nèi)存管理

SAPI:服務(wù)器抽象層, 上層調(diào)用它

php核心構(gòu)成圖

二、走向開(kāi)發(fā)(編寫(xiě)擴(kuò)展)


總體步驟

①下載PHP源碼


要開(kāi)發(fā)PHP擴(kuò)展,第一步要下載PHP源代碼,因?yàn)槔锩嬗虚_(kāi)發(fā)擴(kuò)展需要的工具。

下載地址: wget http://cn2.php.net/get/php-5.5.38.tar.gz/from/this/mirror


②生成擴(kuò)展組件框架?


ext_skel 命令

./ext_skel --extname=myext? 會(huì)生成擴(kuò)展基礎(chǔ)文件夾及文件 php-5.5.38/ext/myext/


③修改配置文件


修改config.m4文件,去掉配置前的dnl

config.m4:? 這是Unix環(huán)境下的Build System配置文件,后面將會(huì)通過(guò)它生成配置和安裝。


修改配置config.m4


④編寫(xiě)核心函數(shù)(可用默認(rèn)的)


步驟如下(myext.c):

1、使用宏P(guān)HP_FE將函數(shù)加入到myext_functions中

2、使用宏P(guān)HP_FUNCTION定義函數(shù)體


擴(kuò)展c文件myext.c

⑤編譯擴(kuò)展+重啟


1、調(diào)用phpize程序生成編譯配置文件 cd myext && phpize

2、編譯擴(kuò)展庫(kù)? ./configure?--with-php-config=/Data/apps/php/bin/php-config

3、make? ? ? ? ?

4、make? test

5、sudo make? install? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 生成myext.so 文件? ?

6、 sudo vim /Data/apps/php/lib/php.ini? 加上 extension=myext.so

7、 sudo /Data/apps/php/sbin/php-fpm reload


修改php配置文件,添加擴(kuò)展


三、了解原理


php的生命周期
php的變量在內(nèi)核--寫(xiě)時(shí)復(fù)制
php的變量在內(nèi)核--底層代碼對(duì)比? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
php的變量在內(nèi)核--結(jié)構(gòu)體表示? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
HashTable分析--結(jié)構(gòu)體
HashTable分析--繪圖表示
Zend引擎API


四、寫(xiě)在最后

? ? php的核心是C語(yǔ)言,核心引擎是Zend,了解HashTable就能了解php的精髓。php的擴(kuò)展開(kāi)發(fā)說(shuō)到底是C語(yǔ)言的編寫(xiě),更見(jiàn)底層功力,希望大家都能成為技術(shù)大牛。

? ? 最后,預(yù)祝大家2018年萬(wàn)事如意,心想事成!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容