如何编写PHP拓展

作者: vins | 来源:发表于2019-07-08 17:12 被阅读6次
为什么要用C扩展

C是静态编译的,执行效率比PHP代码高很多。同样的运算代码,使用C来开发,性能会比PHP要提升数百倍。IO操作如CURL,因为耗时主要在IOWait上,C扩展没有明显优势。
另外C扩展是在进程启动时加载的,PHP代码只能操作Request生命周期的数据,C扩展可操作的范围更广。

准备工作:
  1. lnmp环境
  2. 对应的php版本源码(https://www.php.net/downloads.php)
第一步

在/usr/local/ 下面建立一个空白目录 PhpSourceCode 存放php源码


第二步

进入源码目录 cd /usr/local/PhpSourceCode/php-5.6.40/ext/
执行命令:./ext_skel --extname=myext 出现下面则表示成功
cd myext 可以看到php_myext.h、myext.c、config.m4等几个文件。config.m4是AutoConf工具的配置文件,用来修改各种编译选项。

image.png
第三步:修改config.m4
image.png

修改为:


image.png
第四步:

修改php_myext.h文件: 添加以下两行代码 (del 为注释)

  1. PHP_FUNCTION(confirm_myext_compiled);
  2. PHP_FUNCTION(myext_helloworld);


    image.png
第五步

修改myext.c文件 这的代码是将函数指针注册到Zend引擎,


image.png

在myext.c 末尾加上

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目录下依次执行:
  1. /usr/local/php/bin/phpize
  2. ./configure --with-php-config=/usr/local/php/bin/php-config
  3. make
  4. make test
  5. 然后修改php.ini加入extension=myext.so 重启服务应用
image.png

ok 完成编写....

相关文章

  • 如何编写PHP拓展

    为什么要用C扩展 C是静态编译的,执行效率比PHP代码高很多。同样的运算代码,使用C来开发,性能会比PHP要提升数...

  • laravel使用redis

    安装phpredis(c语言编写的php拓展) .env配置SESSION_DRIVER和CACHE_DRIVER...

  • hello,Phalcon

    目的 工作需要,学习下phalcon 特点 phalcon学习(2.0.9) C语言编写的PHP拓展形式的框架,与...

  • php-rabbitMQ拓展安装

    一、PHP-rabbitMQ拓展安装 1.php-rabbitMQ拓展下载php-rabbitMQ拓展源码通过ph...

  • Centos7 yum 安装 php7.1

    配置yum源 安装 查看php版本 查看php拓展 启动php-fpm pecl安装php拓展 1.安装pecl ...

  • 9.2.10 如何自己编写正则表达式(url)

    9.2.10 如何自己编写正则表达式(url) test.php

  • zephir

    ## zephir简介 zephir是一门可以编写和编译php拓展的脚本语言,它是动态/静态类型的语言,很多的特性...

  • [原]使用PHP安全检测拓展Taint检测你的PHP代码 (附源

    一.拓展简介 Taint是鸟哥写的一个PHP拓展 支持PHP5.2~PHP7.2。拓展启用后能监控某些关键函数是否...

  • PHP拓展

    PHP拓展 影响PHP行为的拓展 音频格式操作 身份认证服务 针对命令行的拓展 压缩与归档拓展 信用卡处理 加密拓...

  • 07-Ajax

    PHP基础 PHP基础语法大部分和JS差不多 如何运行编写好的PHP文件因为PHP是服务端编程语言,所以要在服务端...

网友评论

    本文标题:如何编写PHP拓展

    本文链接:https://www.haomeiwen.com/subject/cpxahctx.html