• 技术文章

    c++扩展PHP手记(二)

    上一章已经写了个简单的C++扩展,这章开始写一个多文件的扩展包括面向对象的使用   1,在上一章成功的基础上,在ext_bankie/下建一个hello.cpp hello.h文件用来编写C++方法 然后编辑hello.h 内容如下: #ifndef _MYCLASS_H_ 7 #define _MYCLASS_H_ 8 #include <iostream> 9 using namespace std; 10 class classHello{ 11 private: string dis; 12 13 public: classHello(string str); 14 public: ~classHello(); 15 int hello_add(int a,int b); 16 string restr(); 17 }; 18 #endif 保存退出 2,编辑hello.cpp 内容如下:  extern "C"{   8 #include "php.h"   9 #include "php_ini.h"  10 #include "ext/standard/info.h"  11 }  12 #include "hello.h"  13 classHello::classHello(string st){  14    dis = st;  15 }  16 classHello::~classHello(){  17  18 }  19  20 int classHello::hello_add(int a,int b){  21         return a+b;  22 }  23  24 string classHello::restr(){  25         return dis;  26 } ~ 保存退出, 3,我们编辑完C++有关文件之后,要去config.m4里,把要用到的CPP文件注册到PHP_NEW_EXTENSION里,,如下所示: PHP_REQUIRE_CXX() 58 PHP_ARG_ENABLE(ext_bankie, whether to enable ext_bankie…

  • 技术文章

    c++扩展PHP手记(一)

    终于有时间研究一下PHP的扩展开发,先来个简单的, 参考:http://my.huhoo.net/archives/2008/06/linuxcphp.html 使用ext_skel简单一些,也就是所谓的动态扩展,静态扩展没研究 首先找到PHP源码文件,找到ext下,然后步骤如下: 1,进入ext下,命令:   server:/data/soft/php/ext # ext_skel --extname = ext_bankie   然后可看到生成有ext_bankie.c/php_ext_bankie.h test文件夹,等等,但是最重要还是config.m4文件, 2,编辑config.m4 ,我的内容如下: if test "$PHP_EXT_BANKIE" != "no"; then PHP_REQUIRE_CXX() PHP_ARG_ENABLE(ext_bankie, whether to enable ext_bankie support, Make sure that the comment is aligned: [ --enable-ext_bankie Enable ext_bankie support]) PHP_ADD_LIBRARY(stdc++,"", EXTRA_LDFLAGS) PHP_NEW_EXTENSION(ext_bankie, ext_bankie.cpp, $ext_shared) fi 退出,config.m4说明: dnl 是注释; PHP_ARG_WITH 或者 PHP_ARG_ENABLE 指定了PHP扩展模块的工作方式,前者意味着不需要第三方库,后者正好相反; PHP_REQUIRE_CXX 用于指定这个扩展用到了C++; PHP_ADD_INCLUDE 指定PHP扩展模块用到的头文件目录; PHP_CHECK_LIBRARY 指定PHP扩展模块PHP_ADD_LIBRARY_WITH_PATH定义以及库连接错误信息等; PHP_ADD_LIBRARY(stdc++,””,EXTERN_NAME_LIBADD)用于将标准C++库链接进入扩展 PHP_SUBST(EXTERN_NAME_SHARED_LIBADD) 用于说明这个扩展编译成动态链接库的形式; PHP_NEW_EXTENSION 用于指定有哪些源文件应该被编译,文件和文件之间用空格隔开; 3,编辑php_ext_bankie.h, 由于TSRM.h这个文件所包含的函数和类都是用纯C语言写的,故应该使用extern来说明如下: 头部加入如下内容: extern "C" { #ifdef ZTS #include "TSRM.h" #endif } //这些有关函数的描述 PHP_MINIT_FUNCTION(ext_bankie); PHP_MSHUTDOWN_FUNCTION(ext_bankie); PHP_RINIT_FUNCTION(ext_bankie); PHP_RSHUTDOWN_FUNCTION(ext_bankie); PHP_MINFO_FUNCTION(ext_bankie);PHP_FUNCTION(confirm_ext_bankie_compiled); PHP_FUNCTION(strFun);//这个自己加入一个新函数,,但是没有成功,,稍后会给出原因             编辑完退出。 4,编辑ext_bankie.cpp,注意:ext_bankie.c 修改为ext_bankie.cpp 头部也需要加入: 21 #ifdef HAVE_CONFIG_H 22 #include "config.h" 23 #endif 24 extern "C"{ 25 #include "php.h" 26…

Free Web Hosting