• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Linux下用C++开发PHP扩展

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
GOOGLE了很久,才发现一篇合适的... ◑﹏◐ 是C++写的PHP扩展!!!还是要记住:源代码版本一定要和你的开发环境一样!!! 步骤如下:
  1. 修改配置文件config.m4
  2. 先去掉PHP_ARG_ENABLE的三行注释,再在最后面 if结束前(FI)加上下面的代码
    PHP_REQUIRE_CXX()
    PHP_ADD_LIBRARY(stdc++, "", EXTRA_LDFLAGS)
    CPPFILE="extname.cpp"
    PHP_NEW_EXTENSION(cpptest,$CPPFILE, $ext_shared)
  3. 将源文件(extname.c文件)后缀改.cpp,再对头文件和源文件加 extern "C"{}
  4. 头文件:
    extern "C" {
    #ifdef ZTS
    #include "TSRM.h"
    #endif
    }
    源文件:
    extern "C" {
    #ifdef HAVE_CONFIG_H
    #include "config.h"
    #endif
    
    #include "php.h"
    #include "php_ini.h"
    #include "ext/standard/info.h"
    }
  5. OK!搞定,运行:phpize -> ./configure -> make -> make install
——关于代码的编写 之前以为需要转换为Zend API的调用,还傻傻地看了《PHP扩展开发及内核应用》(Extending and Embedding PHP),虽然看了肯定有好处。 如果你已经写好了cpp代码,直接给出个接口就可以了!这个是无意中加了个非PHP_FUNCTION(foo),发现能直接用,所以就只需要接收php传入的参数即可... 接收参数方法: 用zend_parse_parameters()函数 其中,接收字符串一定要同时把字符串的长度也接收了,如接收2个字符串参数
    char *argv1= NULL ;
    char *argv2= NULL ; 
    int arg1_len, arg2_len; 
        
    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &argv1, &arg1_len,&argv2,&arg2_len) == FAILURE) 
    {
		return;
     }
解释一下参数的意思:
  1. 第一个参数: ZEND_NUM_ARGS()表示自动获取参数个数(有多少拿多少), 后面跟着的 TSRMLS_CC是为了线程安全
  2. 第二介参数:"ss":表示接收两个字符串参数,如果3个就"sss",其他的int-- "l",double-- "d" 等 。对字符串,接收的同学一定要把字符串的长度也接收了!
  3. 后面的n个参数就是存放的变量,和scanf("%d",a)很像,但字符串就是还是把字符串长度放在字符串变量后面。
返回值: RETURN_XXX : XXX表示LONG,DOUBLE

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#获得枚举类型的长度发布时间:2022-07-13
下一篇:
c#自适应窗体的实现发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap