Linux下用C++开发PHP扩展
GOOGLE了很久,才发现一篇合适的... ◑﹏◐
是C++写的PHP扩展!!!还是要记住:源代码版本一定要和你的开发环境一样!!!
步骤如下:
- 修改配置文件config.m4 先去掉PHP_ARG_ENABLE的三行注释,再在最后面 if结束前(FI)加上下面的代码
- 将源文件(extname.c文件)后缀改.cpp,再对头文件和源文件加 extern "C"{} 头文件:
- OK!搞定,运行:phpize -> ./configure -> make -> make install
PHP_REQUIRE_CXX() PHP_ADD_LIBRARY(stdc++, "", EXTRA_LDFLAGS) CPPFILE="extname.cpp" PHP_NEW_EXTENSION(cpptest,$CPPFILE, $ext_shared)
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" }
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; }解释一下参数的意思:
- 第一个参数: ZEND_NUM_ARGS()表示自动获取参数个数(有多少拿多少), 后面跟着的 TSRMLS_CC是为了线程安全
- 第二介参数:"ss":表示接收两个字符串参数,如果3个就"sss",其他的int-- "l",double-- "d" 等 。对字符串,接收的同学一定要把字符串的长度也接收了!
- 后面的n个参数就是存放的变量,和scanf("%d",a)很像,但字符串就是还是把字符串长度放在字符串变量后面。