1:预定义
在home目录,也可以其他任意目录,写一个文件,例如caleng_module.def
内容是你希望定义的函数名以及参数:
int a(int x,int y)
string b(string str,int n)
2:到php源码目录的ext目录
#cd /usr/local/php-5.4.0/ext/
执行命令,生成对应扩展目录
#./ext_skel --extname=caleng_module --proto=/home/hm/caleng_module.def
3:修改config.m4
去掉dnl的注释
PHP_ARG_ENABLE(caleng_module, whether to enable caleng_module support,
Make sure that the comment is aligned:
[ --enable-caleng_module Enable caleng_module support])
4:修改caleng_module.c
/*
{{{ proto int a(int x, int y) */ PHP_FUNCTION(a) { int
argc = ZEND_NUM_ARGS(); int
x; int
y; int
z; if (zend_parse_parameters(argc
TSRMLS_CC, "ll" ,
&x, &y) == FAILURE) return ; z=x+y; RETURN_LONG(z); } /*
}}} */ /*
{{{ proto string b(string str, int n) */ PHP_FUNCTION(b) { char
*str = NULL; int
argc = ZEND_NUM_ARGS(); int
str_len; long
n; char
*result; char
*ptr; int
result_length; if (zend_parse_parameters(argc
TSRMLS_CC, "sl" ,
&str, &str_len, &n) == FAILURE) return ; result_length
= str_len * n; result
= (char *) emalloc(result_length + 1); ptr
= result; while (n--)
{ memcpy(ptr,
str, str_len); ptr
+= str_len; } *ptr
= '\0' ; RETURN_STRINGL(result,
result_length, 0); } /*
}}} */ |
5:生成扩展库
#cd ./caleng_module
#/usr/local/php/bin/phpize
#./configure --with-php-config=/usr/local/php/bin/php-config
#make
#make install
6:到php的对应extensions目录
如上图所示
#cd /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/
改目录下有生成的caleng_module.so文件
7:修改php.ini
php.ini如果找不到可以从phpinfo()打出的信息看到
#cd /usr/local/php/lib/
php.ini增加扩展信息
extension=caleng_module.so
注:如果找不到php.ini文件,可以将php目录下的php.ini-produce文件拷贝到phpinfo()中php.ini指向路径。
8:重启Apache
# /usr/local/apache2/bin/apachectl restart
9:检查加载
/usr/local/php/bin/php -m
10:PHP调用
echo a(1,2);
输出 3 就说明成功了!
转载自:http://www.cnblogs.com/andhm/archive/2012/08/10/2631923.html