怎么写php的扩展-php教程

资源魔 33 0
为何要用C扩大

C是动态编译的,执行效率比PHP代码高不少。一样的运算代码,应用C来开发,功能会比PHP要晋升数百倍。IO操作如CURL,由于耗时次要正在IOWait上,C扩大不显著劣势。

另外C扩大是正在过程启动时加载的,PHP代码只能操作Request生命周期的数据,C扩大可操作的范畴更广。

保举课程:PHP教程。

第一步

下载PHP的源代码,如php-5.4.16。解压落后入php-5.4.16\ext目次。输出 ./ext_skel –extname=myext,myext就是扩大的称号,执行后天生myext目次。

ext_skel是PHP民间提供的用于天生php扩大骨架代码的对象。

cd myext。能够看到php_myext.h、myext.c、config.m4等几个文件。config.m4是AutoConf对象的设置装备摆设文件,用来修正各类编译选项。

第二步

修正config.m4,将

dnl PHP_ARG_WITH(myext, for myext support,
dnl Make sure that the co妹妹ent is aligned:
dnl [  --with-myext             Include myext support])

修正为

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

下边另有一个 –enable-myext,是示意编译到php内核中。with是作为静态链接库载入的。

第三步

修正php_myext.h,看到PHP_FUNCTION(confirm_myext_compiled); 这里就是扩大函数申明局部,能够添加一行 PHP_FUNCTION(myext_helloworld); 示意申明了一个myext_helloworld的扩大函数。

而后修正myext.c,这个是扩大函数的完成局部。

const zend_function_entry myext_functions[] = {
        PHP_FE(confirm_myext_compiled,  NULL)           /* For testing, remove later. */
        PHP_FE(myext_helloworld,  NULL)
        PHP_FE_END      /* Must be the last line in myext_functions[] */
};

这的代码是将函数指针注册到Zend引擎,添加一行PHP_FE(myext_helloworld, NULL)(前面没有要带分号)。

第四步

正在myext.c末尾加myext_helloworld的执行代码。

PHP_FUNCTION(myext_helloworld)
{
        char *arg = NULL;
	int arg_len, len;
	char *strg;
	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {
		return;
	}
	php_printf("Hello World!\n");
	RETRUN_TRUE;
}

zend_parse_parameters是用来承受PHP传入的参数,RETURN_XXX宏是用来前往给PHP数据。

第五步

正在myext目次下顺次执行phpize、./configure 、make、make install。而后修正php.ini退出extension=myext.so

执行php -r “myext_helloworld(‘test’);”,输入hello world!

以上就是怎样写php的扩大的具体内容,更多请存眷资源魔其它相干文章!

标签: php php开发教程 php开发资料 php开发自学

抱歉,评论功能暂时关闭!