PHP擴(kuò)展開發(fā)不是所有開發(fā)者都會(huì)操作的一個(gè)東西,下面我來演示一個(gè)關(guān)于PHP擴(kuò)展開發(fā)實(shí)現(xiàn)過程,各位同學(xué)有需要可進(jìn)入?yún)⒖?
我們先假設(shè)需要這樣一個(gè)擴(kuò)展,提供一個(gè)叫tao_string的函數(shù),他的主要作用是返回一段字符,對(duì)應(yīng)的PHP代碼可能是這樣:
- function tao_string($str){
- $result = $str;
- return $result;
- }
第一步,生成代碼
PHP為了擴(kuò)展開發(fā)的方便,提供了一個(gè)類似代碼生成器的工具ext_skel,具體可以參見php.net官方的說明 (https://svn.php.net/repository/php/php-src/trunk/README.EXT_SKEL).
創(chuàng)建一個(gè)文件tao.skel,它的內(nèi)容為:string tao_string(string str),就是告訴ext_skel這個(gè)東西,我們要做的擴(kuò)展里面有個(gè)函數(shù)叫tao_string,然后執(zhí)行,代碼如下:
- cd MooENV/src/php-5.3.8/ext/
- ./ext_skel --extname=tao --proto=tao.skel
- cd tao/
這時(shí)候,tao這個(gè)擴(kuò)展的代碼框架就已經(jīng)出來了.
第二步,修改配置
然后修改config.m4文件將10、11、12三行最前面的dnl刪除掉,就是將如下代碼:
- dnl PHP_ARG_WITH(tao, for tao support,
- dnl Make sure that the comment is aligned:
- dnl [ --with-tao Include tao support])
修改為:
- PHP_ARG_WITH(tao, for tao support,
- Make sure that the comment is aligned:
- [ --with-tao Include tao support])
第三步,實(shí)現(xiàn)功能
修改源碼tao.c文件,找到將tao_string這個(gè)函數(shù)修改為如下代碼:
- PHP_FUNCTION(tao_string)
- {
- char *str = NULL;
- int argc = ZEND_NUM_ARGS();
- int str_len;
- char *result;
- if (zend_parse_parameters(argc TSRMLS_CC, "s", &str, &str_len) == FAILURE)//開源代碼Vevb.com
- return;
- str_len = spprintf(&result, 0, "wo shi %.78s", str);
- RETURN_STRINGL(result, str_len, 0);
- }
第四步,編譯擴(kuò)展
保存后,開始編譯,代碼如下:
- /usr/local/php/bin/phpize
- ./configure --with-php-config=/usr/local/php/bin/php-config
- make
第五步,添加擴(kuò)展
這時(shí)候,一切順利的話,該擴(kuò)展已經(jīng)在modules/tao.so這個(gè)位置了,下面就是將這個(gè)擴(kuò)展加入到PHP中去,讓我們PHP程序可以調(diào)用到,代碼如下:
- cp modules/tao.so /usr/local/php/ext/
- vim /usr/local/php/etc/php.ini
- extension=/usr/local/php/ext/tao.so #在php.ini文件最后增加這一行
- service php-fpm restart #重啟PHP服務(wù)
- cp tao.php /data/www/wwwroot/default/
接下來就可以訪問tao.php這個(gè)文件,測(cè)試了.
新聞熱點(diǎn)
疑難解答