一、主要內(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ò)展。

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)用它

二、走向開(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ò)它生成配置和安裝。

④編寫(xiě)核心函數(shù)(可用默認(rèn)的)
步驟如下(myext.c):
1、使用宏P(guān)HP_FE將函數(shù)加入到myext_functions中
2、使用宏P(guān)HP_FUNCTION定義函數(shù)體

⑤編譯擴(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

三、了解原理







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