摘要:創建一個擴展的基本步驟都有哪些。執行命令后,這樣在當前目錄下會生成一個與擴展名一樣的目錄。文件是用于環境檢測的。檢測擴展編譯運行所需的環境是否滿足。其中,是注釋符號。去掉注釋后的代碼如下第三步,代碼實現修改文件。
創建一個擴展的基本步驟都有哪些。示例中,我們將實現如下功能:
echo say();
?>
輸出內容:
$ php ./test.php
$ hello word
在擴展中實現一個say方法,調用say方法后,輸出 hello word。
第一步:生成代碼
PHP為我們提供了生成基本代碼的工具 ext_skel。這個工具在PHP源代碼的./ext目錄下。
$ cd php_src/ext/
$ ./ext_skel --extname=say
extname參數的值就是擴展名稱。執行ext_skel命令后,這樣在當前目錄下會生成一個與擴展名一樣的目錄。
第二步,修改config.m4配置文件
config.m4的作用就是配合phpize工具生成configure文件。configure文件是用于環境檢測的。檢測擴展編譯運行所需的環境是否滿足。現在我們開始修改config.m4文件。
$ cd ./say
$ vim ./config.m4
打開,config.m4文件后,你會發現這樣一段文字。
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 是注釋符號。上面的代碼說,如果你所編寫的擴展如果依賴其它的擴展或者lib庫,需要去掉PHP_ARG_WITH相關代碼的注釋。否則,去掉 PHP_ARG_ENABLE 相關代碼段的注釋。我們編寫的擴展不需要依賴其他的擴展和lib庫。因此,我們去掉PHP_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])
第三步,代碼實現
修改say.c文件。實現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[] */
};
/ }}} /
第四步,編譯安裝
編譯擴展的步驟如下:
$ phpize
$ ./configure
$ make && make install
修改php.ini文件,增加如下代碼:
[say]
extension = say.so
然后執行,php -m 命令。在輸出的內容中,你會看到say字樣。
第五步,調用測試
自己寫一個腳本,調用say方法。看輸出的內容是否符合預期。
BY KOCOR
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/29322.html
摘要:對于每個來說,都有著內心的一種希望寫擴展的沖動了吧。然而,缺乏一個很好的切入點。生成了擴展之后,我們會看到四個文件和一個文件夾。雖然大寫的有宏定義,但是為什么會報錯,我也不太清楚了。這個宏最終會被翻譯成一個函數。 PHP 是用 C 語言寫的。對于每個 PHPer 來說,都有著內心的一種希望寫擴展的沖動了吧。然而,缺乏一個很好的切入點。Google 上搜 PHP 擴展開發,大部分都是復制...
摘要:要學習那么第一步就是要在我們的開發機上安裝并運行,首先我們會先安裝再使用框架提供的安裝小工具,通過使用就能生成我們的工程了。在的官方網站上的文檔中已經很詳細的介紹了如何安裝不過文檔可能講解的并不是那么的細致。從零開始學系列目錄地址 要學習Laravel,那么第一步就是要在我們的開發機上安裝并運行Laravel,首先我們會先安裝composer,再使用laravel框架提供的安裝小工具,...
摘要:既然是從零開始,那么就把作為統一的安裝工具。下面附上安裝方法安裝好之后,就可以開始搭建環境了。環境安裝比較簡單安裝好之后,首先要啟動服務。和一起安裝,我們先去安裝,再做相關配置。成功解析還差一步,就是修改配置文件。 既然是從零開始,那么就把 homebrew 作為統一的安裝工具。如果你不知道 homebrew 是什么東東,移步這里。下面附上 homebrew 安裝方法: /usr/bi...
摘要:既然是從零開始,那么就把作為統一的安裝工具。下面附上安裝方法安裝好之后,就可以開始搭建環境了。環境安裝比較簡單安裝好之后,首先要啟動服務。和一起安裝,我們先去安裝,再做相關配置。成功解析還差一步,就是修改配置文件。 既然是從零開始,那么就把 homebrew 作為統一的安裝工具。如果你不知道 homebrew 是什么東東,移步這里。下面附上 homebrew 安裝方法: /usr/bi...
閱讀 2145·2023-04-26 00:23
閱讀 820·2021-09-08 09:45
閱讀 2442·2019-08-28 18:20
閱讀 2548·2019-08-26 13:51
閱讀 1602·2019-08-26 10:32
閱讀 1398·2019-08-26 10:24
閱讀 2035·2019-08-26 10:23
閱讀 2201·2019-08-23 18:10