PHP编写扩展

吃可爱长大的小学妹 提交于 2019-12-10 01:59:34

开发环境:mac OS X EI Caption

IDE:Ecplise c/c++插件

php版本:5.5.36(当前的php版本>=开发版本)

进入到ext扩展目录下

执行ext_skel脚本,可以看到提示信息

--extname=module module is the name of your extension

在次执行./ext_skel --extname=test

可以看到目录下新增了一个test文件夹

进入test文件夹下,修改config.m4配置文件

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

//dnl表示注释需要取消掉

PHP_ARG_WITH(test, for test support,
[  --with-test             Include test support])

执行phpize,可以看到多出了configure文件,可以帮助我们检测头文件,环境

执行configure文件,此处应该指向你的php-config目录

./configure --with-php-config=/Applications/XAMPP/xamppfiles/bin/php-config

执行sudo make install 安装扩展

执行php -i | grep php.ini 找到php.ini文件

php.ini文件上加上test.so

重启服务器

执行php -m 看到test扩展就成功了

php_test.h头中声明一个函数PHP_FUNCTION(test);

test.c中实现这个函数

PHP_FUNCTION(test){
	/*定义一个int 型变量*/
	long a;
	long b;
	char *c;
	/* 字符串在c中使用指针,并且需要指定长度*/
	int c_len;
	/* 此处字符串一个s 对应两个参数*/
	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lls", &a, &b,&c,&c_len) == FAILURE) {
			return;
		}
	char * str;
	int len = spprintf(&str, 0, "%s:%d\n",c,a*b);
	/*可以在zend_api下查看*/
	RETURN_STRINGL(str, len, 0);
}

注意,需要将test函数注册到zend_api中,否则会报not found

const zend_function_entry test_functions[] = {
/*扩展定义的函数*/
	PHP_FE(test,NULL)
	PHP_FE_END	/* Must be the last line in test_functions[] */
};

重新

sudo make && make install

在php 文件中写下echo test(100,200,"data");

得出 data=20000既成功

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!