|
編寫自己的php擴展函數php程序寫的時間長了,自然對他所提供的功能了如指掌,他所提供的一大堆功能,真是覺得很好用,但有時候會發現php也缺少一些功能,自己總是會產生為php添加一些自定義的功能的想法。久而久之,終于今天憋不住了,開始動手研究如何添加。
下載一個php的源代碼包,這里使用的是php 4.0.5版,解壓后會看到php的根目錄下會有README.EXT_SKEL這樣一個文件,打開詳細閱讀了一下,發現了一個非常好用的工具,這個工具可以幫你構建一個空的php擴展,然后你向里面添加相應的代碼就可以完成你自己的功能擴展了。下面我們就來介紹如何使用這個工具。
首先轉移你的目錄到php的目錄下的ext目錄,如果你只需要一個基本的擴展框架的話,執行下面的命令:
./ext_skel --extname=module_name
module_name是你自己可以選擇的擴展模塊的名字,例如我選擇的my_module。執行工具后會自動在ext目錄下建立你選擇的module_name名字的目錄,里面已經生成了相關的代碼,這些代碼中只需要調整config.m4文件中的三行注釋就可以正常的編譯帶這個自定義擴展模塊的php了。在php的根目錄執行下列操作就可以得到。
./buildconf
./configure --enable-module_name
make
下面我來演示建立my_module擴展框架的全過程,為了更有效果,我們來完成一個php的擴展功能,在php中調用這個功能可以在web頁面中顯示hello world這個經典單詞。
在php目錄下的ext目錄中,執行下面的命令
./ext_skel --extname=my_module
得到反饋結果:
Creating directory my_module
Creating basic files: config.m4 Makefile.in .cvsignore my_module.c php_my_module.h tests/001.phpt my_module.php [done].
To use your new extension, you will have to execute the following steps:
1. $ cd ..
2. $ vi ext/my_module/config.m4
3. $ ./buildconf
4. $ ./configure --[with|enable]-my_module
5. $ make
6. $ ./php -f ext/my_module/my_module.php
7. $ vi ext/my_module/my_module.c
8. $ make
Repeat steps 3-6 until you are satisfied with ext/my_module/config.m4 and
step 6 confirms that your module is compiled into php. Then, start writing
code and repeat the last two steps as often as necessary.
如果你能看懂上面的東西,那就照著去做。如果不是太明白的話,按照我下面的提示來做也可以。
Cd my_module
首先進入my_module目錄
vi config.m4
使用文本編輯器打開config.m4文件,文件內容大致如下:
dnl $Id$
dnl config.m4 for extension my_module
dnl don't forget to call php_EXTENSION(my_module)
dnl Comments in this file start with the string 'dnl'.
dnl Remove where necessary. This file will not work
dnl without editing.
dnl If your extension references something external, use with:
dnl php_ARG_WITH(my_module, for my_module support,
dnl Make sure that the comment is aligned:
dnl [ --with-my_module Include my_module support])
dnl Otherwise use enable:
dnl php_ARG_ENABLE(my_module, whether to enable my_module support,
dnl Make sure that the comment is aligned:
dnl [ --enable-my_module Enable my_module support])
if test "$php_MY_MODULE" != "no"; then
dnl If you will not be testing anything external, like existence of
dnl headers, libraries or functions in them, just uncomment the
dnl following line and you are ready to go.
dnl Write more examples of tests here...
php_EXTENSION(my_module, $ext_shared)
Fi
根據你自己的選擇將
dnl php_ARG_WITH(my_module, for my_module support,
dnl Make sure that the comment is aligned:
dnl [ --with-my_module Include my_module support])
修改成
php_ARG_WITH(my_module, for my_module support,
Make sure that the comment is aligned:
[ --with-my_module Include my_module support])
或者將
dnl php_ARG_ENABLE(my_module, whether to enable my_module support,
dnl Make sure that the comment is aligned:
dnl [ --enable-my_module Enable my_module support])
修改成
php_ARG_ENABLE(my_module, whether to enable my_module support,
Make sure that the comment is aligned:
[ --enable-my_module Enable my_module support])
一般我會選擇后者,然后保存退出。如果你對vi文本編輯器的操作有困難的話,請參考相應的說明文章,這里就不再詳細描述了。
Vi my_module.c
將文件其中的下列代碼進行修改
/* Every user visible function must have an entry in my_module_functions[].
*/
function_entry my_module_functions[] = {
php_FE(say_hello, NULL) /* ß添加著一行代碼 */
php_FE(confirm_my_module_compiled, NULL) /* For testing, remove later. */
{NULL, NULL, NULL} /* Must be the last line in my_module_functions[] */
};
在文件的最后添加下列代碼
php_FUNCTION(say_hello)
{
zend_printf("hello world/n");
}
保存文件退出
vi php_my_module.h
在文件中php_FUNCTION(confirm_my_module_compiled);一行前面添加下面的代碼
php_FUNCTION(say_hello);
保存文件退出
退回到php的根目錄下,執行下面的命令
./buildconf
./configure --enable-my_module
make
如果一切順利的話,我們現在已經將擴展模塊my_module編譯到php里面了。我們編寫下面的代碼進行測試
<?
Say_hello();
?>
保存文件為say_hello.php
在php的根目錄下運行
./php 主站蜘蛛池模板: 国产在线aaa片一区二区99 | 被吊起玩弄的女性奴 | 极品美女久久久久久久久久久 | 黄色软件视频app | 欧美日韩亚洲成人 | 99爱视频在线观看 | 亚洲成人免费观看 | 脔到她哭H粗话HWWW男男动漫 | 国产精品久久久久影院免费 | 免费国产成人高清在线看软件 | 无人区乱码区1卡2卡三卡在线 | 欧美日韩精品一区二区三区高清视频 | 在线视频一区二区三区在线播放 | 日韩a在线看免费观看视频 日韩a视频在线观看 | 国产午夜a理论毛片在线影院 | 热久久综合这里只有精品电影 | 99视频精品全部免费免费观 | 99视频久九热精品 | 99精品免费久久久久久久久日本 | 久久午夜宫电影网 | 最近日本字幕免费高清 | 不卡无线在一二三区 | 精品免费久久久久久影院 | 午夜在线观看免费完整直播网页 | 久久电影精品久久99久久 | 中文字幕在线永久 | 亚洲AV无码影院在线播放 | 奇米色偷偷 | 国产精品嫩草影院一区二区三区 | 国产高清在线露脸一区 | 91久久线看在观草草青青 | 亚洲AV久久无码精品蜜桃 | 日韩一区二区在线免费观看 | 亚洲精品沙发午睡系列 | 美女动态图真人后进式 | 久久免费资源福利资源站 | 幼儿交1300部一区二区 | 暖暖 免费 高清 日本在线 | 名女躁b久久天天躁 | 亚洲人成在线播放网站岛国 | 久久国产精品久久国产精品 |