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 步骤如下:

  1. 下载源代码,建立好文件夹解压 ,例如我解压在 /home/fei/phpex/apache ,/home/fei/phpex/php5.2.16
  2. 先安装apache,
  • 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安装完。

再看PHP的安装:

  • 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

  1. 进入到php源代码目录ext目录下, cd /home/fei/phpex/php-5.2.16/ext/ 运行:

    ./ext_skel --extname=myext

    ext目录下会生成一个myext的文件夹

  2. 修改 config.m4 文件,去掉这三行的dnl注释(搜索PHP_ARG_ENABLE)
    PHP_ARG_ENABLE(myext, whether to enable myext support,Make sure that the comment is aligned:[  --enable-myext           Enable myext support])

    再在最后面加上C++的库引用声明: (注意第二,三行,改成你自己的扩展的名字,大写,还有第五行)

    PHP_REQUIRE_CXX()PHP_SUBST(MYEXT_SHARED_LIBADD)PHP_ADD_LIBRARY_WITH_PATH(stdc++, "", MYEXT_SHARED_LIBADD)PHP_ADD_LIBRARY(stdc++,EXTRA_LDFLAGS)PHP_NEW_EXTENSION(, myext.cpp, $ext_shared)
  3. 将myext.c重命名为myext.cpp ,修改内容:
    #原代码 , 将下面的代码用extern C包含
    #ifdef HAVE_CONFIG_H
    #include "config.h"
    #endif#include "php.h"
    #include "php_ini.h"
    #include "ext/standard/info.h"#改为
    extern "C" {
    #ifdef HAVE_CONFIG_H
    #include "config.h"
    #endif#include "php.h"
    #include "php_ini.h"
    #include "ext/standard/info.h"
    }
    #include "php_matchCmd.h"# 这里可以自主加入你需要包含的文件,例如
    #include "link_file.cpp"

    再添加前端使用的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) ;
    }

  4. 在php_myext.h加入php的函数声明,和上面函数名一样
    PHP_MINIT_FUNCTION(myext);
    PHP_MSHUTDOWN_FUNCTION(myext);
    PHP_RINIT_FUNCTION(myext);
    PHP_RSHUTDOWN_FUNCTION(myext);
    PHP_MINFO_FUNCTION(myext);
    #在下面加入一行函数声明
    PHP_FUNCTION(php_mytest);

  5. 运行
    phpize  (后面可能用phpize --clean清理)
    ./configure --with-php-config=/usr/local/php/bin/php-config
    make
    make install

    如果提示没装autoconf,就apt-get install autoconf 装上 ,这里会提示你的扩展 .so文件在 /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/目录下,

  6. 接下来要配置php.ini文件。这里建议大家先写一个测试文件
    这样可以一目了然的看到加载的到底是哪个php.ini文件 配置php.ini主要就是加上两句,这里extension_dir可以加上,或者将.so文件移到你的扩展目录

    extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613"
    extension=myext.so
  7. 重启apache : httpd -k restart , 将myext文件夹下的myext.php(运行第一步命令时自动生成的)复制到www文件夹下 浏览即可看到模块加载的消息 。

转载于:https://my.oschina.net/ifeixiang/blog/339385

总结一下php5.2.16与apache2.0的C++扩展开发整个过程相关推荐

  1. php5.2 apache2.2,windows中PHP5.2.14以及apache2.2.16安装配置

    windows中PHP5.2.14以及apache2.2.16安装配置 发布于 2014-12-27 23:37:40 | 141 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PH ...

  2. MySql4.1.7 + PHP5 + Apache2.0.52(win2003下测试通过)

    MySql4.1.7 + PHP5 + Apache2.0.52(win2003下测试通过) 1.下载 2.安装 解压 3.配置 Apache与PHP的整合: 3a).与3b).任选一种,我是选3a) ...

  3. php 5.2.16,windows中PHP5.2.14以及apache2.2.16安装配置示例

    感兴趣的小伙伴,下面一起跟随512笔记的小编小韵来看看吧! 首先下载好需要安装的配置文件 1.apache-2.2.16 2.php-5.2.14-Win32 一.apache配置 apache的安装 ...

  4. centos7搜狐 mysql_基于centOS6.7搭建LAMP(httpd-2.4.18+mysql-5.5.47+php-5.6.16)环境

    首先确保系统可以联网.设置IP地址以及虚拟机安装linux在此略过.本文采用centos6.7 64位minimal版.php5.6.16.httpd-2.4.18.mysql-5.5.47版搭建la ...

  5. centos7 nginx php5.4,详解CentOS7.0下Nginx+PHP5.4+MySQL5.5+Memcached+Redis的架构部署

    详解Nginx+PHP5.4+MySQL5.5+Memcached+Redis的架构部署需要安装Nginx.PHP.mysql.memcached.redis! 一.硬件: 1.服务器型号:HP DL ...

  6. php5.4.16升级至php5.6.40

    php5.4.16升级至5.6.40(5.6最新版本) 因为zabbix官方文档显示,zabbix3.0不支持php7.0+版本,此次业务需求升级到php7.0以下最新版本5.6.40 zabbix官 ...

  7. apache2.0性能优化

    本文来自:Linux宝库 -- http://www.linuxpk.com/3191.html 查看了连接数和当前的连接数,分别是 netstat -ant | grep $ip:80 | wc - ...

  8. solaris配置php,Solaris 9.0下安装配置Apache-2.0.45+php-4.3.1+mysql-4.1.0

    # 安装 mysql-4.1.0 cd /bak/mysql-4.1.0 CC=gcc CFLAGS="-O6" CXX=gcc CXXFLAGS="-O6 -felid ...

  9. redhat9下使用apache2.0实现个人主页空间的方法1(转)

    redhat9下使用apache2.0实现个人主页空间的方法1(转)[@more@] 系统平台:redhat9.0 基本要求:有一个apache2.0的安装.并且包含了mod_userdir模块. 默 ...

最新文章

  1. 基于Python的频谱分析(二)——频谱泄露
  2. 斐波那契数列(fabnacci)java实现
  3. PhoneGap/Cordova Android应用签名发布系列问题处理收集
  4. oracle表空间,角色,权限,表,索引,序列号,视图,同义词,约束条件,存储函数和过程,常用数据字典,基本数据字典信息,查看VGA信息,维护表空间,创建表空间等信息
  5. 试题 历届试题 翻硬币(贪心)
  6. COJ 1163 乘法逆元的求解
  7. android软件perthbus,Transit
  8. 正式举报林-裴 (1999) 论文涉嫌学术不端
  9. python写脚本入门-学习Python的教程?:python 脚本菜鸟教程
  10. ApacheCN/iBooker 未来计划 2019.11
  11. 2016NOI冬令营day4
  12. %@ include file=和jsp:include file=区别
  13. 如何让我的网站(独立网站或者blog)被百度收录?
  14. 【笔记】《编写高质量代码:改善c#程序的157个建议》-第1章 基本语言要素(SamWang)...
  15. python中__future__包
  16. 清华大学计算机考研总结,2020考研清华大学计算机考研考试科目总结
  17. Qt加载gif动态图
  18. Java项目:超市进销存管理系统(java+SpringBoot+Html+Layui+echarts+mysql)
  19. 线上连锁线下整合 连锁电商建设方案
  20. 概率论及概率图模型基础

热门文章

  1. rock-paper-scissors
  2. Docker 私有仓库 Harbor registry 安全认证搭建 [Https]
  3. 虚拟机Oracle VM VirtualBox linux系统如何访问windows共享文件夹
  4. 程序人生【一些经典的资料】
  5. CMMI过程域-MA度量和分析
  6. C语言中控制printf的打印颜色实例及vt100的控制符
  7. 一种改进的快速人脸检测算法
  8. 计算机视觉目标检测的框架与过程
  9. springboot整合websocket实现一对一消息推送和广播消息推送
  10. 网络名称空间 实例研究 veth处于不同网络的路由问题