2011年10月23日日曜日

php extensionを作成する

php extensionを作成する


1、スケルトンを作成する
# cd /usr/local/share/php-5.3.8/ext/
# ./ext_skel --extname=helloworld

2、./helloworld/config.m4を修正

 PHP_ARG_WITH(helloworld, for helloworld support,
 Make sure that the comment is aligned:
 [  --with-helloworld             Include helloworld support])



3、コンパイル
# phpize
# ./configure
# make


4、dlの有効化(dlの有効化方法
でふぉではdl()関数は使用できない。
php.iniを修正
enable_dl=On


5、シンボリックリンクを作成
dl()関数は、extension_dir以下のものしか指定できないらしい。

# cd /usr/lib64/20090626
# ln -s /usr/local/share/php-5.3.8/ext/helloworld/modules/helloworld.so ./helloworld.so


6、実行
dl('helloworld.so');
helloworld();


7、引数と戻り値
① 引数を渡す

if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &value) == FAILURE)
return;

引数1 : 引数の数
引数2 : 取得する順番(long, char, long → lcl)
引数3 : 受け取る変数のアドレス(&value)


l  long 整数型
d  double 浮動小数点数型
s  string 文字列型
b  boolean 論理値型
r  resource リソース型
a  array 配列型
o  any object オブジェクト型
z  zval zval型


zend_parse_parameters



② 戻り値を取得する

RETURN_RESOURCE(l)
RETURN_BOOL(b)
RETURN_NULL()
RETURN_LONG(l)
RETURN_DOUBLE(d)
RETURN_STRING(s, dup)
RETURN_STRINGL(s, l, dup)
RETURN_EMPTY_STRING()
RETURN_FALSE
RETURN_TRUE



8、

0 件のコメント:

コメントを投稿