vi config.m4
PHP_ARG_ENABLE(example, whether to enable laiwenhui support,
[ --enable-laiwenhui Enable laiwenhui support])
# PHP_ARG_WITH(testmodule, for testmodule support,
# Make sure that the comment is aligned:
# --with-testmodule Include testmodule support])
# 这里的with是说明,要启用这个模块,依赖于某些其他模块,这里我们可以暂时不管。
# 比如:模块example,如果依赖apxs的话,就需要:
# /configure --with-apxs=/usr/local/apache/bin/apxs --enable-example
2、声明函数
在文件php_example.h文件中编辑
vi php_example.h
我们找到PHP_FUNCTION(confirm_example_compiled); 在其后面添加PHP_FUNCTION(test);
3、实现函数test
vi example.c
把下面代码写到最后面
/**
* 我添加的第一个PHP扩展
*
* */
PHP_FUNCTION(test)
{
char *str = NULL;
char *arg = NULL;
int arg_len;
int len;
// str = "Hello my first php extention! ^_^";
//len = strlen(str);
//RETURN_STRINGL(str, len, 0);
//开始想这样写的可以没效果,不知道为什么不行。难道不支持strlen但是能编译通过。
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {
return;
}
len = spprintf(&str, 0, "Hello my first php extention! ^_^ param %s",arg);
RETURN_STRINGL(str, len, 0);
}
spprintf应该是php的函数。
zend_parse_parameters是PHP的一个函数表示取得参数解析,如果失败返回。
4、告诉zend引擎这个example模块中有哪些函数。
找到:zend_function_entry testmodule_functions[]这一行,注释的意思是:所有可用的函数必须要在这里面定义。
修改为:
* Every user visible function must have an entry in example_functions[].
*/
const zend_function_entry example_functions[] = {
PHP_FE(confirm_example_compiled, NULL) /* For testing, remove later. */
PHP_FE(test, NULL) /* 我的扩展test */
{NULL,NULL, NULL} /* Must be the last line in example_functions[] */
};
/* }}}
5、编译
进入example模块
./configure –with-php-config=/usr/local/php/bin/php-config
/usr/local/php/bin/phpize
make
cp modules/example.so /usr/local/php/lib/php/extensions/