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开发自学
抱歉,评论功能暂时关闭!