PHP扩展开发--实验成功
原文:http://kimi.it/496.html
http://blog.csdn.net/u011957758/article/details/72234075
----------------------------------------------------------------------------------------------------------------
在上一篇文章《PHP擴(kuò)展開發(fā):安裝PHP》我們已經(jīng)將開發(fā)PHP擴(kuò)展的PHP環(huán)境安裝成功,那么接下來采用最簡單直接的方式創(chuàng)建第一個擴(kuò)展。
我們先假設(shè)業(yè)務(wù)場景,是需要有這么一個擴(kuò)展,提供一個叫ccvita_string的函數(shù),他的主要作用是返回一段字符。(這個業(yè)務(wù)場景實在太假,大家就這么看看吧)對應(yīng)的PHP代碼可能是這樣:
| function ccvita_string($str){ |
| ? ? ?$result = '<a href="'.$str.'">Link</a>'; |
| ? ? ?return $result; |
| } |
第一步,生成代碼
PHP為了擴(kuò)展開發(fā)的方便,提供了一個類似代碼生成器的工具ext_skel,具體可以參見說明。
首先我們創(chuàng)建一個文件ccvita.skel,它的內(nèi)容為
| string ccvita_string(string str) |
就是告訴ext_skel這個東西,我們要做的擴(kuò)展里面有個函數(shù)叫ccvita_string。然后執(zhí)行
| cd MooENV/src/php-5.3.8/ext/ |
| ./ext_skel --extname=ccvita --proto=ccvita.skel |
| cd ccvita/ |
這時候,ccvita這個擴(kuò)展的代碼框架就已經(jīng)出來了。
?
?
第二步,修改配置
然后修改config.m4文件將10、11、12三行最前面的dnl刪除掉,就是將
| dnl PHP_ARG_WITH(ccvita, for ccvita support, |
| dnl Make sure that the comment is aligned: |
| dnl [ ?--with-ccvita ? ? ? ? ? ? Include ccvita support]) |
修改為
| PHP_ARG_WITH(ccvita, for ccvita support, |
| Make sure that the comment is aligned: |
| [ ?--with-ccvita ? ? ? ? ? ? Include ccvita support]) |
第三步,實現(xiàn)功能
修改源碼ccvita.c文件
找到將ccvita_string這個函數(shù)修改為
| PHP_FUNCTION(ccvita_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) |
| ? ? ? ? return; |
| ? |
| ? ? str_len = spprintf(&result, 0, "<a href=\"%.78s\">Link</a>", 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ò)展
這時候,一切順利的話,該擴(kuò)展已經(jīng)在modules/ccvita.so這個位置了。下面就是將這個擴(kuò)展加入到PHP中去,讓我們PHP程序可以調(diào)用到。
| cp modules/ccvita.so /usr/local/php/ext/ |
| vim /usr/local/php/etc/php.ini |
| extension=/usr/local/php/ext/ccvita.so #在php.ini文件最后增加這一行 |
| service php-fpm restart #重啟PHP服務(wù) |
| cp ccvita.php /data/www/wwwroot/default/ |
接下來就可以訪問ccvita.php這個文件,測試擴(kuò)展了。下一篇,將會涉及一些更深入的內(nèi)容。
相關(guān)代碼,可以在我的github上clone出來,地址:https://github.com/KimiChen/PHP-EXT
轉(zhuǎn)載于:https://www.cnblogs.com/oxspirt/p/7442412.html
總結(jié)
以上是生活随笔為你收集整理的PHP扩展开发--实验成功的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python多线程理解
- 下一篇: php 实现栈与队列