windows下开发并编译PHP扩展的方法


Posted in PHP onMarch 18, 2011

现在就简单说一在WINDOWS下开发PHP扩展的步骤:
首先需要准备的软件有:
cygwin 安装路径e:\app\cygwin
visual studio C++ 6.0,
修改环境变量,把已经安装好的PHP路径设置为环境变量。在这里,假设我的PHP安装目录是:e:\app\php5.2.5,那么我把WINDOWS环境变量后面加上这个安装目录。方便一会儿使用php.exe。
PHP源代码,这里假设为e:\c_source_code\php-5.2.5

1、修改文件 “PHP源文件目录/ext/ext_skel_win32.php”,在这里就是:E:\c_source_code\php-5.2.5\ext,其中主要是修改其中的cygwin路径。$cygwin_path = 'e:\app\cygwin\bin';
把$cygwin_path修改为你实际安装cygwin的路径。
2、在源代码ext目录也就是e:\c_source_code\php-5.2.5\ext下,执行 php ext_skel_win32.php --extname=<EXT_NAME>,此时会在ext目录下生成<EXT_NAME>目录,这个目录就是我们将要进行PHP扩展开发的框架。比如你运行php.exe ext_skel_win32.php --extname=foo,会在ext目录下生成foo目录。
3、将php-root\dev\php5ts.lib拷贝至 “ext/<EXT_NAME>”中。比如你要开发的PHP扩展名为foo,那么就需要把php-root\dev\php5ts.lib拷贝到PHP源文件目录\ext\foo中。
4、修改foo.c内容,编写我们需要的C代码。
5、进入<EXT_NAME>目录,打开<EXT_NAME>.dsp。
设置VC6工程,
设置菜单“组建”->“移除工程配置”,选中“Win 32 Release_TS”,
设置菜单“工程”,选中“Win 32 Release_TS”
打开Tab“连接”,设置“输出文件名”中的目录,
[可选]打开Tab“C/C++”,增加“预处理器定义”“,COMPILE_DL_<EXT_NAME>”(注意全大写,默认加入的),取消预定义“LIBZEND_EXPORTS”(否则不可引入zend函数)。
6、设置好以后,进行编译,会生成一个dll文件,文件名是<EXT_NAME>.dll,比如在我们的例子中就为foo.dll
把foo.dll拷到e:\app\ext目录下,并在php.ini里加上一行extension=foo.dll,重启一下apache,查看phpinfo();,会发现我们的PHP扩展foo()已经加载进来,已经可以使用这个foo扩展了。

PHP 相关文章推荐
php获取通过http协议post提交过来xml数据及解析xml
Dec 16 PHP
PHP Session 变量的使用方法详解与实例代码
Sep 11 PHP
CodeIgniter框架中_remap()使用方法2例
Mar 10 PHP
PHP生成迅雷、快车、旋风等软件的下载链接代码实例
May 12 PHP
php实现网站顶踩功能的完整前端代码
Jul 19 PHP
ThinkPHP安装和设置
Jul 27 PHP
轻松实现php文件上传功能
Feb 17 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
Sep 22 PHP
基于PHP实现的多元线性回归模拟曲线算法
Jan 30 PHP
PHP学习记录之数组函数
Jun 01 PHP
php设计模式之享元模式分析【星际争霸游戏案例】
Mar 23 PHP
eval(cmd)与eval($cmd)的区别与联系
Jul 07 PHP
WordPress判断用户是否登录的代码
Mar 17 #PHP
用php的ob_start来生成静态页面的方法分析
Mar 09 #PHP
PHP用GD库生成高质量的缩略图片
Mar 09 #PHP
php GeoIP的使用教程
Mar 09 #PHP
让PHP COOKIE立即生效,不用刷新就可以使用
Mar 09 #PHP
通过JavaScript或PHP检测Android设备的代码
Mar 09 #PHP
PHP中uploaded_files函数使用方法详解
Mar 09 #PHP
You might like
PHP内核介绍及扩展开发指南―基础知识
2011/09/11 PHP
laravel-admin的多级联动方法
2019/09/30 PHP
JavaScript 基于原型的对象(创建、调用)
2009/10/16 Javascript
JS实现在Repeater控件中创建可隐藏区域的代码
2010/09/16 Javascript
JavaScript 更严格的相等 [译]
2012/09/20 Javascript
javascript作用域链与执行环境详解
2017/03/25 Javascript
angular6.0使用教程之父组件通过url传递id给子组件的方法
2018/06/30 Javascript
小程序实现列表多个批量倒计时
2021/01/29 Javascript
Vue模板语法中数据绑定的实例代码
2019/05/17 Javascript
基于jQuery的时间戳与日期间的转化
2019/06/21 jQuery
微信公众号获取用户地理位置并列出附近的门店的示例代码
2019/07/25 Javascript
微信小程序如何获取地址
2019/12/24 Javascript
vue项目或网页上实现文字转换成语音播放功能
2020/06/09 Javascript
[33:23]Secret vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python新手经常遇到的17个错误分析
2014/07/30 Python
python使用any判断一个对象是否为空的方法
2014/11/19 Python
Centos Python2 升级到Python3的简单实现
2016/06/21 Python
利用python将图片转换成excel文档格式
2017/12/30 Python
下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决
2018/04/23 Python
对python字典元素的添加与修改方法详解
2018/07/06 Python
浅谈Keras参数 input_shape、input_dim和input_length用法
2020/06/29 Python
图解CSS3制作圆环形进度条的实例教程
2016/05/26 HTML / CSS
HTML5的结构和语义(3):语义性的块级元素
2008/10/17 HTML / CSS
英国口碑最好的的维他命胶囊品牌:Myvitamins(有中文站)
2016/12/03 全球购物
德国珠宝和手表在线商店:VALMANO
2019/03/24 全球购物
英文版银行求职信
2013/10/09 职场文书
医学类个人求职信范文
2014/02/05 职场文书
“学雷锋活动月”总结
2014/03/09 职场文书
情人节寄语大全
2014/04/11 职场文书
大学应届毕业生求职信
2014/05/24 职场文书
领导班子个人对照检查材料(群众路线)
2014/09/26 职场文书
2015年青年志愿者协会工作总结
2015/04/27 职场文书
运动会开幕式致辞
2015/07/29 职场文书
解决python绘图使用subplots出现标题重叠的问题
2021/04/30 Python
MySql 8.0及对应驱动包匹配的注意点说明
2021/06/23 MySQL
OpenCV项目实践之停车场车位实时检测
2022/04/11 Python