摘要:創(chuàng)建一個(gè)擴(kuò)展的基本步驟都有哪些。執(zhí)行命令后,這樣在當(dāng)前目錄下會(huì)生成一個(gè)與擴(kuò)展名一樣的目錄。文件是用于環(huán)境檢測的。檢測擴(kuò)展編譯運(yùn)行所需的環(huán)境是否滿足。其中,是注釋符號(hào)。去掉注釋后的代碼如下第三步,代碼實(shí)現(xiàn)修改文件。
創(chuàng)建一個(gè)擴(kuò)展的基本步驟都有哪些。示例中,我們將實(shí)現(xiàn)如下功能:
echo say();
?>
輸出內(nèi)容:
$ php ./test.php
$ hello word
在擴(kuò)展中實(shí)現(xiàn)一個(gè)say方法,調(diào)用say方法后,輸出 hello word。
第一步:生成代碼
PHP為我們提供了生成基本代碼的工具 ext_skel。這個(gè)工具在PHP源代碼的./ext目錄下。
$ cd php_src/ext/
$ ./ext_skel --extname=say
extname參數(shù)的值就是擴(kuò)展名稱。執(zhí)行ext_skel命令后,這樣在當(dāng)前目錄下會(huì)生成一個(gè)與擴(kuò)展名一樣的目錄。
第二步,修改config.m4配置文件
config.m4的作用就是配合phpize工具生成configure文件。configure文件是用于環(huán)境檢測的。檢測擴(kuò)展編譯運(yùn)行所需的環(huán)境是否滿足。現(xiàn)在我們開始修改config.m4文件。
$ cd ./say
$ vim ./config.m4
打開,config.m4文件后,你會(huì)發(fā)現(xiàn)這樣一段文字。
dnl If your extension references something external, use with:
dnl PHP_ARG_WITH(say, for say support,
dnl Make sure that the comment is aligned:
dnl [ --with-say Include say support])
dnl Otherwise use enable:
dnl PHP_ARG_ENABLE(say, whether to enable say support,
dnl Make sure that the comment is aligned:
dnl [ --enable-say Enable say support])
其中,dnl 是注釋符號(hào)。上面的代碼說,如果你所編寫的擴(kuò)展如果依賴其它的擴(kuò)展或者lib庫,需要去掉PHP_ARG_WITH相關(guān)代碼的注釋。否則,去掉 PHP_ARG_ENABLE 相關(guān)代碼段的注釋。我們編寫的擴(kuò)展不需要依賴其他的擴(kuò)展和lib庫。因此,我們?nèi)サ鬚HP_ARG_ENABLE前面的注釋。去掉注釋后的代碼如下:
dnl If your extension references something external, use with:
dnl PHP_ARG_WITH(say, for say support,
dnl Make sure that the comment is aligned:
dnl [ --with-say Include say support])
dnl Otherwise use enable:
PHP_ARG_ENABLE(say, whether to enable say support,
Make sure that the comment is aligned:
[ --enable-say Enable say support])
第三步,代碼實(shí)現(xiàn)
修改say.c文件。實(shí)現(xiàn)say方法。
找到PHP_FUNCTION(confirm_say_compiled),在其上面增加如下代碼:
PHP_FUNCTION(say)
{
zend_string *strg; strg = strpprintf(0, "hello word"); RETURN_STR(strg);
}
找到 PHP_FE(confirm_say_compiled, 在上面增加如下代碼:
PHP_FE(say, NULL)
修改后的代碼如下:
const zend_function_entry say_functions[] = {
PHP_FE(say, NULL) /* For testing, remove later. */ PHP_FE(confirm_say_compiled, NULL) /* For testing, remove later. */ PHP_FE_END /* Must be the last line in say_functions[] */
};
/ }}} /
第四步,編譯安裝
編譯擴(kuò)展的步驟如下:
$ phpize
$ ./configure
$ make && make install
修改php.ini文件,增加如下代碼:
[say]
extension = say.so
然后執(zhí)行,php -m 命令。在輸出的內(nèi)容中,你會(huì)看到say字樣。
第五步,調(diào)用測試
自己寫一個(gè)腳本,調(diào)用say方法。看輸出的內(nèi)容是否符合預(yù)期。
BY KOCOR
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/29322.html
摘要:對(duì)于每個(gè)來說,都有著內(nèi)心的一種希望寫擴(kuò)展的沖動(dòng)了吧。然而,缺乏一個(gè)很好的切入點(diǎn)。生成了擴(kuò)展之后,我們會(huì)看到四個(gè)文件和一個(gè)文件夾。雖然大寫的有宏定義,但是為什么會(huì)報(bào)錯(cuò),我也不太清楚了。這個(gè)宏最終會(huì)被翻譯成一個(gè)函數(shù)。 PHP 是用 C 語言寫的。對(duì)于每個(gè) PHPer 來說,都有著內(nèi)心的一種希望寫擴(kuò)展的沖動(dòng)了吧。然而,缺乏一個(gè)很好的切入點(diǎn)。Google 上搜 PHP 擴(kuò)展開發(fā),大部分都是復(fù)制...
摘要:要學(xué)習(xí)那么第一步就是要在我們的開發(fā)機(jī)上安裝并運(yùn)行,首先我們會(huì)先安裝再使用框架提供的安裝小工具,通過使用就能生成我們的工程了。在的官方網(wǎng)站上的文檔中已經(jīng)很詳細(xì)的介紹了如何安裝不過文檔可能講解的并不是那么的細(xì)致。從零開始學(xué)系列目錄地址 要學(xué)習(xí)Laravel,那么第一步就是要在我們的開發(fā)機(jī)上安裝并運(yùn)行Laravel,首先我們會(huì)先安裝composer,再使用laravel框架提供的安裝小工具,...
摘要:既然是從零開始,那么就把作為統(tǒng)一的安裝工具。下面附上安裝方法安裝好之后,就可以開始搭建環(huán)境了。環(huán)境安裝比較簡單安裝好之后,首先要啟動(dòng)服務(wù)。和一起安裝,我們先去安裝,再做相關(guān)配置。成功解析還差一步,就是修改配置文件。 既然是從零開始,那么就把 homebrew 作為統(tǒng)一的安裝工具。如果你不知道 homebrew 是什么東東,移步這里。下面附上 homebrew 安裝方法: /usr/bi...
摘要:既然是從零開始,那么就把作為統(tǒng)一的安裝工具。下面附上安裝方法安裝好之后,就可以開始搭建環(huán)境了。環(huán)境安裝比較簡單安裝好之后,首先要啟動(dòng)服務(wù)。和一起安裝,我們先去安裝,再做相關(guān)配置。成功解析還差一步,就是修改配置文件。 既然是從零開始,那么就把 homebrew 作為統(tǒng)一的安裝工具。如果你不知道 homebrew 是什么東東,移步這里。下面附上 homebrew 安裝方法: /usr/bi...
閱讀 2155·2023-04-26 00:23
閱讀 830·2021-09-08 09:45
閱讀 2451·2019-08-28 18:20
閱讀 2559·2019-08-26 13:51
閱讀 1612·2019-08-26 10:32
閱讀 1406·2019-08-26 10:24
閱讀 2043·2019-08-26 10:23
閱讀 2210·2019-08-23 18:10