PHP7擴展開發方法詳解
今天扣丁學堂給大家介紹一下關于從零開始創建一個PHP擴展,開發環境為php7,實現一個自定義函數say_hi,調用此函數返回HelloWorld。下面我們一起來看一下吧。

一生成代碼
PHP提供了生成基本代碼的工具ext_skel,這個工具在PHP源代碼的./ext目錄下
$cdphp_src/ext/
$./ext_skel--extname=say_hi
extname參數的值就是擴展名稱,執行ext_skel命令后,會在當前目錄下會生成一個與擴展名一樣的目錄。
二修改config.m4配置文件
config.m4的作用是配合phpize工具生成configure文件(onfigure文件是用于檢測擴展編譯運行所需的環境是否滿足),現在開始修改config.m4文件
$cd./say_hi
$vim./config.m4
config.m4文件有這樣一段文字
dnlIfyourextensionreferencessomethingexternal,usewith:
dnlPHP_ARG_WITH(say,forsaysupport,
dnlMakesurethatthecommentisaligned:
dnl[--with-sayIncludesaysupport])
dnlOtherwiseuseenable:
dnlPHP_ARG_ENABLE(say,whethertoenablesaysupport,
dnlMakesurethatthecommentisaligned:
dnl[--enable-sayEnablesaysupport])
其中,dnl是注釋符號,上面的代碼意思是如果你所編寫的擴展依賴其它的擴展或者lib庫,需要去掉PHP_ARG_WITH相關代碼的注釋。否則,去掉PHP_ARG_ENABLE相關代碼段的注釋。我們編寫的擴展不需要依賴其他的擴展和lib庫。因此,我們去掉PHP_ARG_ENABLE前面的注釋。去掉注釋后的代碼如下:
dnlIfyourextensionreferencessomethingexternal,usewith:
dnlPHP_ARG_WITH(say,forsaysupport,
dnlMakesurethatthecommentisaligned:
dnl[--with-sayIncludesaysupport])
dnlOtherwiseuseenable:
PHP_ARG_ENABLE(say,whethertoenablesaysupport,
Makesurethatthecommentisaligned:
[--enable-sayEnablesaysupport])
三實現擴展方法
修改say_hi.c文件來實現say_hi方法,找到PHP_FUNCTION(confirm_say_hi_compiled),在其上面增加如下代碼:
PHP_FUNCTION(say_hi)
{
zend_string*strg;
strg=strpprintf(0,"HelloWorld");
RETURN_STR(strg);
}
找到PHP_FE(confirm_say_hi_compiled,NULL),在上面增加如下代碼:
PHP_FE(say_hi,NULL)
修改后的代碼如下:
constzend_function_entrysay_functions[]={
PHP_FE(say_hi,NULL)
PHP_FE(confirm_say_hi_compiled,NULL)/*Fortesting,removelater.*/
PHP_FE_END/*Mustbethelastlineinsay_functions[]*/
};
/*}}}*/
四編譯安裝寫好的擴展
$phpize
$./configure
$make&&makeinstall
修改php.ini文件,增加如下代碼:
extension=say_hi.so
然后執行php-m命令查看已安裝擴展,在輸出的內容中如果有say_hi則說明安裝成功
五測試
寫一個腳本test.php,假如放在home目錄,內容如下:
echosay_hi();
然后執行:
php~/test.php
輸出HelloWorld,擴展編寫成功
以上就是關于扣丁學堂PHP培訓之PHP7擴展開發方法的詳細介紹,最后想要了解更多關于PHP開發發展前景趨勢,請關注扣丁學堂官網、微信等平臺,扣丁學堂IT職業在線學習教育平臺為您提供權威的PHP視頻教程系統,通過千鋒扣丁學堂金牌講師在線錄制的一套PHP視頻教程課程,讓你快速掌握PHP從入門到精通開發實戰技能。扣丁學堂PHP技術交流群:374332265。
*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。












