一、主要內容:
1??php擴展的概念和底層實現
2??編寫一個php擴展的步驟
3??php底層,Zend 引擎API的介紹 ,HashTable?原理
二、相關概念
? ? 1.【php擴展】
php的插件,也就是php的擴展,因為php的底層就是C語言。
php –m 或者 php –i 都可以查看擴展。
其實,xhproh, curl都是php的擴展。
2.【為什么要有擴展?】
1)【效率高】復雜的圖像算法,需要寫成PHP擴展
2)【操作底層,未支持的技術】1)PHP需要支持一項她還未支持的技術。這通常包括包裹一些現成的C函數庫,以便提供PHP接口。 2)有些系統(tǒng)調用不能用PHP直接訪問,需要編寫成擴展,比如使用Linux下的fork()函數創(chuàng)建一個進程。
3)【商業(yè)化,保護源碼】想商業(yè)話一個應用,但是又不想暴露源代碼,就可以編寫成擴展。
3.【PHP核心組成?】
Zend引擎:1)核心、基礎設施 2)PHP語法實現 3)腳本編譯執(zhí)行 4)擴展機制 5)內存管理
SAPI:服務器抽象層, 上層調用它
二、走向開發(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? 會生成擴展基礎文件夾及文件 php-5.5.38/ext/myext/
③修改配置文件
修改config.m4文件,去掉配置前的dnl
config.m4:? 這是Unix環(huán)境下的Build System配置文件,后面將會通過它生成配置和安裝。
④編寫核心函數(可用默認的)
步驟如下(myext.c):
1、使用宏PHP_FE將函數加入到myext_functions中
2、使用宏PHP_FUNCTION定義函數體
⑤編譯擴展+重啟
1、調用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語言的編寫,更見底層功力,希望大家都能成為技術大牛。
? ? 最后,預祝大家2018年萬事如意,心想事成!