如何写php的扩展

  介绍

如何写php的扩展?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!

,为什么要用C扩展

C是静态编译的,执行效率比php代码高很多。同样的运算代码,使用C来开发,性能会比php要提升数百倍.IO操作如卷发,因为耗时主要在IOWait上,C扩展没有明显优势。

另外C扩展是在进程启动时加载的,php代码只能操作请求生命周期的数据,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工具的配置文件,用来修改各种编译选项。

<强>第二步

修改配置。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的扩展大概了解了吗?希望文章内容对大家有所帮助。如果想了解更多相关文章内容,欢迎关注行业资讯频道。

如何写php的扩展