PHP擴展開發:hello word!

分類: php 發布時間: 2015-08-16 00:54 瀏覽: 831 次

對于php開發人員來說,寫php擴展好像是一個很高級的東西。其實只是我們沒有去接觸,或者工作中根本沒用到,所以感覺很高級。下面的例子,就是讓你用5分鐘,來編寫你人生的第一個php擴展-hello word!

我們先假設業務場景,是需要有這么一個擴展,提供一個叫helloword的函數,他的主要作用是返回一段字符。(這個業務場景實在太假,大家就這么看看吧)對應的PHP代碼可能是這樣:


function helloword($str){

$result = 'helloword!'.$str;

return $result;

}

第一步,生成代碼 PHP為了擴展開發的方便,提供了一個類似代碼生成器的工具ext_skel,具體可以參見說明。 ?首先我們創建一個文件helloword.skel,它的內容為

string helloword(string str)

就是告訴ext_skel這個東西,我們要做的擴展里面有個函數叫helloword。然后執行


cd MooENV/src/php-5.3.8/ext/

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

cd helloword/

這時候,helloword這個擴展的代碼框架就已經出來了。

第二步,修改配置 ?然后修改config.m4文件將10、11、12三行最前面的dnl刪除掉,就是將


dnl PHP_ARG_WITH(helloword, for helloword support,

dnl Make sure that the comment is aligned:

dnl [? --with-helloword???????????? Include helloword support])

修改為


PHP_ARG_WITH(helloword, for helloword support,

Make sure that the comment is aligned:

 [? --with-helloword???????????? Include helloword support])

第三步,實現功能 ?修改源碼helloword.c文件 ?找到將helloword這個函數修改為


PHP_FUNCTION(helloword) {

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, "helloword! %s", str);
RETURN_STRINGL(result, str_len, 0);

}

第四步,編譯擴展 ?保存后,開始編譯

/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install

第五步,添加擴展 ?這時候,一切順利的話,該擴展已經在modules/helloword.so這個位置了。下面就是將這個擴展加入到PHP中去,讓我們PHP程序可以調用到。

vim /usr/local/php/lib/php.ini

extension=/usr/local/php/ext/helloword.so #在php.ini文件最后增加這一行

#重啟PHP服務

service php-fpm restart 

寫一個簡單的寂寞代碼helloword.php,內容如下:


<?php

helloword('這就是我的第一個php擴展,實在太簡單了!');

結果:

RV`~OQG]KP0PH]VV2_}$T)2

如果覺得我的文章對您有用,請隨意打賞。您的支持將鼓勵我繼續創作!

今日特肖