PHP 拓展 開發,PHP擴充套件開發 第乙個擴充套件

2021-10-25 21:30:30 字數 1720 閱讀 3520

我們先假設業務場景,是需要有這麼乙個擴充套件,提供乙個叫ccvita_string的函式,他的主要作用是返回一段字元。(這個業務場景實在太假,大家就這麼看看吧)對應的php**可能是這樣:function ccvita_string($str){

$result = 'link';

return $result;

第一步,生成**

php為了擴充套件開發的方便,提供了乙個類似**生成器的工具ext_skel,具體可以參見說明。

首先我們建立乙個檔案ccvita.skel,它的內容為string ccvita_string(string str)

就是告訴ext_skel這個東西,我們要做的擴充套件裡面有個函式叫ccvita_string。然後執行

cd mooenv/src/php-5.3.8/ext/

./ext_skel --extname=ccvita --proto=ccvita.skel

cd ccvita/

這時候,ccvita這個擴充套件的**框架就已經出來了。

第二步,修改配置

然後修改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])

第三步,實現功能

修改原始碼ccvita.c檔案

找到將ccvita_string這個函式修改為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, "link", str);

return_stringl(result, str_len, 0);

第四步,編譯擴充套件

儲存後,開始編譯/usr/local/php/bin/phpize

./configure --with-php-config=/usr/local/php/bin/php-config

make

第五步,新增擴充套件

這時候,一切順利的話,該擴充套件已經在modules/ccvita.so這個位置了。下面就是將這個擴充套件加入到php中去,讓我們php程式可以呼叫到。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服務

cp ccvita.php /data/www/wwwroot/default/

php擴充套件開發

php擴充套件 pecl 跟php引擎一樣都是使用c語言開發。php核心開發組成員鳥哥laruence使用的是vim進行php開發。書籍 案例 php src ext pecl開發郵件組 盡量編寫一些phpt測試用例,php src tests下有很多參考.測試時用 enable debug編譯ph...

php擴充套件開發

二 php擴充套件開發 擴充套件開發流程 生成開發骨架 修改config.m4 編碼 編譯擴充套件為so 修改php.ini 1.生成開發骨架 1.1 進入擴充套件目錄 cd php 7.0.1 ext 1.2 用.ext skel生成骨架 ext skel extname module 1.3 修...

PHP擴充套件開發

php function say hello len spprintf strg,0,hello s n arg return stringl strg,len,0 1.引數接收 這裡接收函式的引數需要通過zend parse parameter函式解析,第乙個引數指定使用者傳入say hello函...