php的扩展写法总结

 更新时间:2019年05月14日 08:35:19   投稿:laozhang  
在本篇文章里小编给大家分享了关于怎么写php的扩展的相关知识点内容,有需要的朋友们跟着学习下。

为什么要用C扩展

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

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

第二步

修改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 session垃圾回收机制实例分析

    PHP session垃圾回收机制实例分析

    这篇文章主要介绍了PHP session垃圾回收机制,简单分析了session垃圾回收机制的原理、配置及相关使用技巧,需要的朋友可以参考下
    2019-06-06
  • PHP实践教程之过滤、验证、转义与密码详解

    PHP实践教程之过滤、验证、转义与密码详解

    我们在开发应用时,一般有个约定:不要信任任何来自不受自己控制的数据源中的数据。所以这个时候就用到了这篇文章介绍的内容,本文主要给大家介绍了关于PHP实践教程之过滤、验证、转义与密码的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-07-07
  • php时间戳转换代码详解

    php时间戳转换代码详解

    在本篇文章里小编给各位分享一篇关于php时间戳转换的知识点内容,有需要的朋友们可以参考下。
    2019-08-08
  • 学习php设计模式 php实现建造者模式

    学习php设计模式 php实现建造者模式

    这篇文章主要介绍了php设计模式中的建造者模式,使用php实现建造者模式,感兴趣的小伙伴们可以参考一下
    2015-12-12
  • php实现数字转亿万单位的示例代码

    php实现数字转亿万单位的示例代码

    这篇文章主要为大家详细介绍了php如何实现数字转亿万单位,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-11-11
  • 浅谈php和js中json的编码和解码

    浅谈php和js中json的编码和解码

    下面小编就为大家带来一篇浅谈php和js中json的编码和解码。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • PHP设计模式之适配器模式定义与用法详解

    PHP设计模式之适配器模式定义与用法详解

    这篇文章主要介绍了PHP设计模式之适配器模式,结合实例形式较为详细的分析了php适配器模式的概念、原理、定义、用法及相关注意事项,需要的朋友可以参考下
    2018-04-04
  • php代码调试利器firephp安装与使用方法分析

    php代码调试利器firephp安装与使用方法分析

    这篇文章主要介绍了php代码调试利器firephp安装与使用方法,简单分析了firephp的下载、安装、测试代码调试等使用方法及相关操作技巧,需要的朋友可以参考下
    2018-08-08
  • PHP实现将上传图片自动缩放到指定分辨率,并保持清晰度封装类示例

    PHP实现将上传图片自动缩放到指定分辨率,并保持清晰度封装类示例

    这篇文章主要介绍了PHP实现将上传图片自动缩放到指定分辨率,并保持清晰度封装类,涉及php针对jpeg、png、gif等格式图片的缩放与输出相关操作技巧,需要的朋友可以参考下
    2019-06-06
  • 与文件上传有关的php配置参数总结

    与文件上传有关的php配置参数总结

    搞个了图片上传,死活不好使,后来发现是php参数配置的问题,下面总结下与文件上传有关的php参数,有类似情况的朋友可以参考下哈
    2013-06-06

最新评论