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)

    即可

  • 相关阅读:
    fstream的使用方法
    Java按键事件KeyEvent
    java之 22天 GUI 图形界面编程(二)
    java之 22天 GUI 图形界面编程(一)
    java使用省略号代替多参数(参数类型... 参数名)
    jsoup
    C++获得本机所有网卡的IP和MAC地址信息
    otl中遇到的一些字符数组长度问题
    otl使用存储过程或是LEFT JOIN时提示输出类型未知的问题
    Android:布局实例之常见用户设置界面
  • 原文地址:https://www.cnblogs.com/zhenghongxin/p/6706879.html
Copyright © 2011-2022 走看看