旗下导航:搜·么
当前位置:网站首页 > PHP教程 > 正文

怎样写php的扩大【php教程】

作者:搜搜PHP网发布时间:2019-11-26分类:PHP教程浏览:103


导读:为何要用C扩大C是静态编译的,实行效力比PHP代码高许多。一样的运算代码,运用C来开辟,机能会比PHP要提拔数百倍。IO操纵如CURL,由于耗时主要在IOWait上,C扩大...
为何要用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 comment 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的扩大的细致内容,更多请关注ki4网别的相干文章!

标签:php