zoukankan      html  css  js  c++  java
  • 开发一个小的php扩展

    今天试了一下在php添加扩展,看了挺多资料,细节上不一致,其他大体是差不多的。

    我们来开发一个叫ccvita_string的函数,他的主要作用是返回一段字符,对应的php代码可能如此:

    function ccvita_string($str){
         $result = '<a href="'.$str.'">Link</a>'return $result;
    }
    即生成链接

    第一步,生成代码

     进入php源代码中自带的工具ext_skel,利用其创建文件。

    首先我们创建一个文件ccvita.skel,它的内容为

    string ccvita_string(string str)

    就是告诉ext_skel这个东西,我们要做的扩展里面有个函数叫ccvita_string。然后执行

    cd sofe/hongxin/src/php-5.3.27/ext/
    ./ext_skel --extname=ccvita --proto=ccvita.skel
    cd ccvita/

    这时候,ccvita这个扩展的代码框架就已经出来了。

    第二步,修改配置

    vim config.m4

    将10、11、12三行最前面的dnl删除掉,就是将

    dnl PHP_ARG_WITH(ccvita, for ccvita support,
    dnl Make sure that the comment is aligned:
    dnl [  --with-ccvita             Include ccvita support])

    修改为

    PHP_ARG_WITH(ccvita, for ccvita support,
    Make sure that the comment is aligned:
    [  --with-ccvita             Include ccvita support])

    第三步,实现功能

    vim ccvita.c

    找到将ccvita_string这个函数修改为

    PHP_FUNCTION(ccvita_string)
    {
        char *str = NULL;
        int argc = ZEND_NUM_ARGS();
        int str_len;
        char *result;
    
        if (zend_parse_parameters(argc TSRMLS_CC, "s", &str, &str_len) == FAILURE)
            return;
    
        str_len = spprintf(&result, 0, "<a href="%.78s">Link</a>", str);
        RETURN_STRINGL(result, str_len, 0);
    }

    第四步,编译扩展
    保存后,开始编译

    /usr/local/php/bin/phpize    //务必是当前运行的phpize,避免将其他版本php执行
    ./configure --with-php-config=/usr/local/php/bin/php-config  //这里需要带上当前运行的php-config路径
    make && make install

    第五步,添加扩展

    这时候,一切顺利的话,该扩展已经在modules/ccvita.so这个位置了。下面就是将这个扩展加入到PHP中去,让我们PHP程序可以调用到。

    cp modules/ccvita.so /usr/local/php/ext/
    vim /usr/local/php/etc/php.ini
    extension=/usr/local/php/ext/ccvita.so #在php.ini文件最后增加这一行
    service php-fpm restart #重启PHP服务
    cp ccvita.php /data/www/wwwroot/default/  

    接下来就可以访问ccvita.php这个文件,测试扩展了

    直接使用

    ccvita_string($str)

    即可

  • 相关阅读:
    DataTablez转List对象效率慢的问题.
    Oracle 删除重复数据
    1.layui 添加旋转等待, 2.div里面加载HTML页面
    layui-table JSON.stringify()序列化出来的不同行数据类型错误.导致后台转成表格的时候出错.(常用)
    0基础学MVC课程
    构造函数的执行顺序
    html控件自动点 “加号”添加 多个附件
    C#委托之个人理解 转自 loose_went
    一步一步学Linq to sql系列文章 转lovecherry
    使用AOP 使C#代码更清晰 转yanghua_kobe
  • 原文地址:https://www.cnblogs.com/zhenghongxin/p/6706879.html
Copyright © 2011-2022 走看看