总结一下php5.2.16与apache2.0的C++扩展开发整个过程
2019独角兽企业重金招聘Python工程师标准>>>
开发环境:ubuntu 11(虚拟机环境) 开发平台: php-5.2.16.tar+apache2.0
PHP API 20041225 PHP Extension 20060613 Zend Extension 220060519说明一下为什么要用这么旧的版本,没原因,因为公司官方服务器是用这个版本...
之前用php5.3.10稳定版本已经做过一次,可是移植到php5.2.16上却用不了。发现原因应该是PHP与ZEND API不同!所以开发扩展时版本一定要一致啊! 一致的意思是:都是PHP5.2.X 或 PHP5.3.X 等等...
一:安装开发环境 如果用ubuntu自身的apt-get install 来安装apache与php的话不一定是你需要开发的版本!
所以还是要自己下载源代码编译安装。
关于编译安装的问题这篇文章帮了我很大的忙 http://wangyan.org/blog/install-php-from-source.html 步骤如下:
- cd httpd-2.2.17/
- ./configure --prefix=/usr/local/apache (--prefix是安装到哪个目录,其他的就暂时不用了) 然后 make -> make install
- 再配置apache : 将httpd 加入系统变量中,即直接编辑/etc/environment文件,或者新建软链接。建立软链接命令如下: ln -s /usr/local/apache/bin/httpd /usr/local/bin
- 将apache加入开机自启动项: ln -s /usr/local/apache/bin/apachectl /etc/init.d/update-rc.d apachectl defaults OK,下面可以用 httpd -k start(或restart)对apache服务器进行操作,至此,apache安装完。
- cd php-5.2.16 ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache/bin/apxs 后面还有很多项都是不太需要的... 然后 make -> make install
- 将Apache与PHP5联系起来,在些之前,需要将php5也加到系统的环境变量中 同样方法,建立软链接: ln -s /usr/local/php/bin/php /usr/local/binln -s /usr/local/php/bin/phpize /usr/local/bin (将phpize也加进去,等下要用) 接下来设置apache的配置文件:/usr/local/apache/conf/httpd.conf 查找"AddType application/x-gzip .gz .tgz",在下面添加: AddType application/x-httpd-php .php 到此,php与apache的连接完成,可以试一下 重启apache ,和运行 php -i
接下来开始我们真正的工作——开发PHP C++扩展 (以myext为例)
我们需要修改的就3个文件: config.m4 , myext.c , php_myext.h
再添加前端使用的php函数接口,这里接口名字可以和扩展名字不一样;例如下面添加php_mytest函数:
# 在zend_function_entry 数组里面添加我们的自定义函数 zend_function_entry matchCmd_functions[] = {PHP_FE(php_mytest,NULL) {NULL, NULL, NULL} /* Must be the last line in matchCmd_functions[] */ };在文件最后加入函数的实现:
PHP_FUNCTION(php_mytest) {//to get and store the argumentschar *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;}//php_printf("argv1 :%s\n",argv1);//php_printf("argv2 :%s\n",argv2);double dValue = func_from_link_file(argv1,argv2) ;RETURN_DOUBLE(dValue) ; }
如果提示没装autoconf,就apt-get install autoconf 装上 ,这里会提示你的扩展 .so文件在 /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/目录下,
这样可以一目了然的看到加载的到底是哪个php.ini文件 配置php.ini主要就是加上两句,这里extension_dir可以加上,或者将.so文件移到你的扩展目录 extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613" extension=myext.so
转载于:https://my.oschina.net/ifeixiang/blog/339385
总结
以上是生活随笔为你收集整理的总结一下php5.2.16与apache2.0的C++扩展开发整个过程的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Java parallel contro
- 下一篇: 既之前的基础,先写个简单的PHP 与数据