成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

編寫自己的php擴展函數

瀏覽:2日期:2024-07-08 13:18:58

php程序寫的時間長了,自然對他所提供的功能了如指掌,他所提供的一大堆功能,真是覺得很好用,但有時候會發現php也缺少一些功能,自己總是會產生為php添加一些自定義的功能的想法。久而久之,終于今天憋不住了,開始動手研究如何添加。;下載一個php的源代碼包,這里使用的是php 4.0.5版,解壓后會看到php的根目錄下會有README.EXT_SKEL這樣一個文件,打開詳細閱讀了一下,發現了一個非常好用的工具,這個工具可以幫你構建一個空的php擴展,然后你向里面添加相應的代碼就可以完成你自己的功能擴展了。下面我們就來介紹如何使用這個工具。;首先轉移你的目錄到php的目錄下的ext目錄,如果你只需要一個基本的擴展框架的話,執行下面的命令:./ext_skel --extname=module_namemodule_name是你自己可以選擇的擴展模塊的名字,例如我選擇的my_module。執行工具后會自動在ext目錄下建立你選擇的module_name名字的目錄,里面已經生成了相關的代碼,這些代碼中只需要調整config.m4文件中的三行注釋就可以正常的編譯帶這個自定義擴展模塊的php了。在php的根目錄執行下列操作就可以得到。./buildconf./configure --enable-module_namemake;下面我來演示建立my_module擴展框架的全過程,為了更有效果,我們來完成一個php的擴展功能,在php中調用這個功能可以在web頁面中顯示hello world這個經典單詞。在php目錄下的ext目錄中,執行下面的命令./ext_skel --extname=my_module得到反饋結果:Creating directory my_moduleCreating 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.m43. $ ./buildconf4. $ ./configure --[with|enable]-my_module5. $ make6. $ ./php -f ext/my_module/my_module.php7. $ vi ext/my_module/my_module.c8. $ make;Repeat steps 3-6 until you are satisfied with ext/my_module/config.m4 andstep 6 confirms that your module is compiled into PHP. Then, start writingcode 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_modulednl 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 workdnl 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 worldn");}保存文件退出;vi php_my_module.h在文件中PHP_FUNCTION(confirm_my_module_compiled);一行前面添加下面的代碼PHP_FUNCTION(say_hello);保存文件退出;退回到php的根目錄下,執行下面的命令./buildconf./configure --enable-my_modulemake;如果一切順利的話,我們現在已經將擴展模塊my_module編譯到php里面了。我們編寫下面的代碼進行測試<?;;;Say_hello();?>保存文件為say_hello.php在php的根目錄下運行./php –q say_hello.php正常情況下會顯示hello world表示我們的第一個擴展正常的運行了!;解釋一下上面做的操作,ext_skel生成一些框下文件,我們需要修改以下文件my_module.c 擴展模塊的主程序php_my_module.h擴展模塊的頭文件config.m4 配置文件;主程序中描述了php擴展模塊的聲明,模塊中含有多少個函數,各個函數的作用,在phpinfo函數中顯示什么內容,模塊初始化做些什么,結束做些什么都會在這個文件里進行描述。我們在上面只是添加了一個函數say_hello,并且描述了say_hello函數的具體內容,調用zend_printf系統函數在php中打印字符串。;在對應的頭文件中聲明了say_hello這個函數,從而完成了我們預期的功能。下面我們會編寫一個更復雜的擴展,創造一個帶參數的php擴展函數,根據給入的參數,顯示hello world, xxxx。Xxxx代表輸入的字符串內容,例如我的名字yorgo。;Vi my_module.c修改最后的say_hello函數內容如下:PHP_FUNCTION(say_hello){;;;;zval **yourname;;;;;;if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &yourname) == FAILURE);;;;{;;;;WRONG_PARAM_COUNT;;;;;};;;;;zend_printf("hello world, %sn", Z_STRVAL_PP(yourname));}存盤退出。退回php的根目錄,運行make修改say_hello.php為<?;;;Say_hello(“yorgo);?>保存退出后運行./php –q say_hello.php得出結果hello world, yorgo表示我們這次的修改也成功了,可以改變say_hello中的參數,看看動態的效果。這里主要解釋上面修改的函數內容,由于say_hello函數需要有參數引入,所以在my_module.c中的say_hello函數主要在進行參數的處理,將php中引用say_hello時所填寫的參數內容正確的傳遞到my_module.c中的say_hello處理函數中。為此,程序中添加了這么幾行。zval **yourname;if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &yourname) == FAILURE){WRONG_PARAM_COUNT;}zend_printf("hello world, %sn", Z_STRVAL_PP(yourname));;代碼解釋如下:zval **yourname;初始化一個參數的指針ZEND_NUM_ARGS()得到傳遞過來得參數數量,并且判斷如果不為1的時候表示有問題,報錯。zend_get_parameters_ex(1, &yourname)將剛剛初始化的指針指向傳遞過來的參數,如果不成功則報錯。Z_STRVAL_PP(yourname)處理指針指向的參數并獲得實際存儲的值。

標簽: PHP
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
久久影院亚洲| 人人精品人人爱| 精品伦理精品一区| 亚洲精品免费一二三区| 国产精品99久久久久久有的能看| 亚洲免费观看| 欧美一区国产二区| 亚洲国产另类av| 欧美一区二区三区久久精品茉莉花| 在线观看亚洲一区| 国产午夜精品理论片a级大结局| 日本亚洲电影天堂| 国产精品国产三级国产普通话99| 椎名由奈av一区二区三区| 人人超碰91尤物精品国产| 在线看片成人| 亚洲一区二区三区四区不卡| 久久精品国产久精国产爱| 亚洲成人一区在线| 亚洲成av人**亚洲成av**| 五月婷婷色综合| 午夜精品亚洲| 伊大人香蕉综合8在线视| 欧美一级欧美三级在线观看| 亚洲一区二区三区国产| 本田岬高潮一区二区三区| 亚洲免费影院| 欧美精品一区二区三区四区 | 亚洲丝袜另类动漫二区| av在线这里只有精品| 欧美人伦禁忌dvd放荡欲情| 亚洲影视在线播放| 最新成人av网站| 亚洲欧美色图小说| av高清久久久| 在线播放亚洲一区| 精品国产三级电影在线观看| 亚洲人体一区| 国产一区二区成人久久免费影院| 男人的天堂成人在线| 中国色在线观看另类| 91看片淫黄大片一级在线观看| 日韩欧美黄色影院| 免费不卡在线视频| 欧美男男青年gay1069videost| 日本不卡在线视频| 国产视频一区在线观看一区免费| 国产精品国模大尺度视频| 午夜久久一区| 精品乱人伦一区二区三区| 国产亚洲一区二区三区在线观看| 亚洲二区在线视频| 欧美婷婷在线| 精品久久国产字幕高潮| 另类成人小视频在线| 在线天堂一区av电影| 国产调教视频一区| 92国产精品观看| 欧美专区在线观看一区| 在线观看亚洲一区| 亚洲摸摸操操av| 蓝色福利精品导航| 久久精品国产99国产精品| 欧美三级免费| 久久久亚洲精华液精华液精华液| 精品亚洲欧美一区| 在线观看日产精品| 色婷婷精品大视频在线蜜桃视频| 日韩三级视频在线观看| 亚洲免费观看高清完整版在线 | 日本不卡视频一二三区| 91视频免费播放| 久久国产精品免费一区| 久久精品一区二区三区不卡| 成人一区二区三区在线观看| 国产一区三区三区| 粉嫩高潮美女一区二区三区| 久久久久久久久97黄色工厂| 成人av在线播放网址| 久久国产欧美日韩精品| 亚洲精品乱码| 91精品国产91久久综合桃花| 榴莲视频成人在线观看| 欧美男男青年gay1069videost | 国产精品一级二级三级| 国产成人综合亚洲91猫咪| 国产视频在线观看一区| 亚洲国产综合91精品麻豆| 久久网站免费| 久久疯狂做爰流白浆xx| 欧美二区在线观看| 不卡视频免费播放| 久久久久久一二三区| 红桃视频国产精品| 亚洲一区二三区| 在线看国产一区| 久久中文字幕电影| 一区二区三区国产豹纹内裤在线| 国产精品日韩欧美一区二区| 日本美女视频一区二区| 亚洲福利一区二区三区| 国产精品久久久对白| 日韩va欧美va亚洲va久久| 欧美日韩国产三级| 成人免费观看视频| 欧美三级日韩三级| 国产精品一二三四| 国产日韩欧美在线一区| 成人做爰69片免费看网站| 国产精品日韩成人| 日韩视频在线观看国产| 美女视频第一区二区三区免费观看网站 | 欧美三级电影一区| 亚洲综合一区二区精品导航| 色综合婷婷久久| 91精品视频网| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | 亚洲精品网站在线观看| 一本色道久久综合| 久久综合狠狠综合久久激情 | 91免费看`日韩一区二区| 亚洲日本一区二区三区| 在线影院国内精品| 亚洲福利免费| 日韩视频在线观看一区二区| 91丝袜美腿高跟国产极品老师| 日韩成人一级大片| 26uuu色噜噜精品一区| 在线观看中文字幕不卡| 成人av在线电影| 免费看精品久久片| 国产喷白浆一区二区三区| 在线视频国内自拍亚洲视频| 99久久精品免费看国产| 久久国产婷婷国产香蕉| 国产喷白浆一区二区三区| 日本高清免费不卡视频| 色综合色狠狠综合色| 五月天激情综合| 亚洲视频中文字幕| 欧美老女人在线| 色屁屁一区二区| 99re热这里只有精品免费视频| 精品一区二区久久| 日本一区二区三区在线观看| 337p亚洲精品色噜噜狠狠| 亚洲毛片一区| 欧美一区在线看| 三级久久三级久久| 亚洲色图欧洲色图婷婷| 51久久夜色精品国产麻豆| 国产欧美短视频| av成人老司机| 首页亚洲欧美制服丝腿| 中文字幕欧美一| 91精品国产综合久久国产大片| 色婷婷久久99综合精品jk白丝| 欧美承认网站| a亚洲天堂av| 日韩—二三区免费观看av| 亚洲婷婷国产精品电影人久久| 日韩欧美一区二区免费| 宅男在线国产精品| 久久综合福利| 久久美女性网| 亚洲天堂偷拍| 久久99精品一区二区三区三区| 亚洲黄色片在线观看| 777精品伊人久久久久大香线蕉| 色悠悠亚洲一区二区| 欧美激情1区| 91丝袜美腿高跟国产极品老师 | 欧美丰满嫩嫩电影| 正在播放亚洲| 亚洲高清不卡一区| 91免费看片在线观看| 色综合天天综合狠狠| 国产精品99久| 国产综合一区二区| 亚洲成人黄色小说| 亚洲精品自拍动漫在线| 在线视频观看一区| 久久精品首页| 亚洲亚洲精品三区日韩精品在线视频| av电影在线观看一区| 国产一区二区三区免费观看| 国内精品免费**视频| 污片在线观看一区二区| 亚洲欧洲av在线| 欧美日韩在线一区二区三区| 国产精品综合一区二区| 久久99国产精品免费| 1024成人网| 国产精品白丝在线| 久久久久久久综合| 亚洲电影在线| 欧美色图麻豆| 麻豆一区二区三| 久久成人精品无人区| 在线观看免费视频综合|