一颜矿、主要內(nèi)容:
1??php擴展的概念和底層實現(xiàn)
2??編寫一個php擴展的步驟
3??php底層,Zend 引擎API的介紹 嫉晶,HashTable?原理
二骑疆、相關(guān)概念
? ? 1.【php擴展】
php的插件,也就是php的擴展替废,因為php的底層就是C語言箍铭。
php –m 或者 php –i 都可以查看擴展。
其實舶担,xhproh, curl都是php的擴展坡疼。
2.【為什么要有擴展?】
1)【效率高】復(fù)雜的圖像算法衣陶,需要寫成PHP擴展
2)【操作底層柄瑰,未支持的技術(shù)】1)PHP需要支持一項她還未支持的技術(shù)。這通常包括包裹一些現(xiàn)成的C函數(shù)庫剪况,以便提供PHP接口教沾。 2)有些系統(tǒng)調(diào)用不能用PHP直接訪問,需要編寫成擴展译断,比如使用Linux下的fork()函數(shù)創(chuàng)建一個進程授翻。
3)【商業(yè)化,保護源碼】想商業(yè)話一個應(yīng)用孙咪,但是又不想暴露源代碼堪唐,就可以編寫成擴展淮菠。
3.【PHP核心組成合陵?】
Zend引擎:1)核心、基礎(chǔ)設(shè)施 2)PHP語法實現(xiàn) 3)腳本編譯執(zhí)行 4)擴展機制 5)內(nèi)存管理
SAPI:服務(wù)器抽象層, 上層調(diào)用它
二踏拜、走向開發(fā)(編寫擴展)
①下載PHP源碼
要開發(fā)PHP擴展速梗,第一步要下載PHP源代碼镀琉,因為里面有開發(fā)擴展需要的工具蕊唐。
下載地址: wget http://cn2.php.net/get/php-5.5.38.tar.gz/from/this/mirror
②生成擴展組件框架?
ext_skel 命令
./ext_skel --extname=myext? 會生成擴展基礎(chǔ)文件夾及文件 php-5.5.38/ext/myext/
③修改配置文件
修改config.m4文件替梨,去掉配置前的dnl
config.m4:? 這是Unix環(huán)境下的Build System配置文件副瀑,后面將會通過它生成配置和安裝糠睡。
④編寫核心函數(shù)(可用默認的)
步驟如下(myext.c):
1狈孔、使用宏P(guān)HP_FE將函數(shù)加入到myext_functions中
2均抽、使用宏P(guān)HP_FUNCTION定義函數(shù)體
⑤編譯擴展+重啟
1油挥、調(diào)用phpize程序生成編譯配置文件 cd myext && phpize
2深寥、編譯擴展庫? ./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的核心是C語言议街,核心引擎是Zend,了解HashTable就能了解php的精髓吧雹。php的擴展開發(fā)說到底是C語言的編寫吮炕,更見底層功力访得,希望大家都能成為技術(shù)大牛。
? ? 最后鳄炉,預(yù)祝大家2018年萬事如意搜骡,心想事成!