如何写php的扩展?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!
,为什么要用C扩展
C是静态编译的,执行效率比php代码高很多。同样的运算代码,使用C来开发,性能会比php要提升数百倍.IO操作如卷发,因为耗时主要在IOWait上,C扩展没有明显优势。
另外C扩展是在进程启动时加载的,php代码只能操作请求生命周期的数据,C扩展可操作的范围更广。
<强>第一步强>
下载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工具的配置文件,用来修改各种编译选项。
<强>第二步强>
修改配置。m4,将
dnl PHP_ARG_WITH (myext myext支持, 黑暗与确保评论对齐: dnl [——with-myext包括myext支持])
修改为
PHP_ARG_WITH (myext myext支持, [——with-myext包括myext支持])
下边还有一个-enable-myext,是表示编译到php内核中犹如是作为动态链接库载入的。
<强>第三步强>
修改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)/*测试,稍后删除。*/PHP_FE (myext_helloworld NULL) PHP_FE_END/*必须最后一行在myext_functions [] */};
这的代码是将函数指针注册到Zend引擎,增加一行PHP_FE (myext_helloworld, NULL)(后面不要带分号)。
<强>第四步强>
在myext。c末尾加myext_helloworld的执行代码。
PHP_FUNCTION (myext_helloworld) { char *参数=零; int arg_len len; char * strg; 如果(zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC,“s",,参数,,arg_len)==失败){ 返回; } php_printf (“Hello World ! \ n"); RETRUN_TRUE; }
zend_parse_parameters是用来接受PHP传入的参数,RETURN_XXX宏是用来返回给PHP数据。
<强>第五步强>
在myext目录下依次执行phpize,。/配置,让,让安装。然后修改php . ini加入=myext延伸。所以
执行php - r”myext_helloworld(“测试”);”,输出hello world !
感谢各位的阅读!看完上述内容,你们对如何写php的扩展大概了解了吗?希望文章内容对大家有所帮助。如果想了解更多相关文章内容,欢迎关注行业资讯频道。