• 我的第一个php扩展


    一、进入php源码包,找到ext文件夹

    cd /owndata/software/php-5.4.13/ext

    文件夹下放的都是php的相关扩展模块

    二、生成自己的扩展文件夹和相关文件

    php支持开发者开发自己的扩展,提供了ext_skel骨架,用来构建扩展基本文件

    ./ext_skel --extname=myext

    运行完成后,会在ext目录下生产一个myext扩展目录

    三、编写一个hello world简单测试扩展

    cd myext

    1.编辑myext目录下的config.m4文件

    1
    2
    3
    4
    5
    dnl PHP_ARG_WITH(myext, for myext support,
     
    dnl Make sure that the comment is aligned:
     
    dnl [  --with-myext             Include myext support])

      

    将上面这段改成

    1
    2
    3
    4
    5
    PHP_ARG_WITH(myext, for myext support,
     
    [  --with-myext             Include myext support])

      

    2.编辑php_myext.h文件

    修改php_myext.h,看到PHP_FUNCTION(confirm_myext_compiled); 这里就是扩展函数声明部分,可以增加一

    PHP_FUNCTION(myext_helloworld);

    3.注册到zend引擎里面,编辑myext.c文件在这个里面增加一行PHP_FE(myext_helloworld,  NULL)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    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[] */
     
    };

      

    最后在文件末尾加入myext_helloworld执行代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    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("my first ext,Hello World! ");
     
        RETRUN_TRUE;
     
    }

    四、编译php扩展
    在myext目录下运行phpize

    /usr/local/webserver/php/bin/phpize

    安装扩展

    ./configure --with-php-config=/usr/local/webserver/php/bin/php-config

    make && make install

    然后在php安装的目录下生产.so的文件

    /usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20100525/myext.so

    复制myext.so文件到php安装的扩展目录下

    cp myext.so /usr/local/webserver/php/ext/

    编辑php.ini文件加入一行扩展路径

    extension=/usr/local/webserver/php/ext/myext.so

    重启php-fpm

    service php restart

    查看php扩展是否安装进去了

    /usr/local/webserver/php/bin/php -m|grep myext

    查看扩展中是否有myext_helloworld这个方法

    php --rf "myext_helloworld"

    确认成功后测试myext打印helloworld

     /usr/local/webserver/php/bin/php -r "myext_helloworld('test');"

    或者创建demo.php

    1
    2
    3
    4
    5
    <?php
     
    echo myext_helloworld('test');
     
    ?>

      

    /usr/local/webserver/php/bin/php demo.php 

    运行后输出

    my first ext,Hello World!

    自此扩展开发小demo就实现了

  • 相关阅读:
    React 高阶组件
    Facebook Graph API 接口请求
    (转载)HTML:模拟链接被按下,在新标签页打开页面,不使用window.open(可能被拦截)
    php file_put_contents() 写入回车
    mysql 慢查询开启
    FB接口之 js调用支付窗口
    8 个必备的PHP功能开发
    linux 负载 待读
    大话团队管理。
    API编排
  • 原文地址:https://www.cnblogs.com/herry52/p/6113305.html
Copyright © 2020-2023  润新知