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集成FCK的函数代码
Sep 27 PHP
PHP逐行输出(ob_flush与flush的组合)
Feb 04 PHP
解析如何用php screw加密php源代码
Jun 20 PHP
Zend Framework教程之路由功能Zend_Controller_Router详解
Mar 07 PHP
PHPWind9.0手动屏蔽验证码解决后台关闭验证码但是依然显示的问题
Aug 12 PHP
PHP微信分享开发详解
Jan 14 PHP
详谈php中 strtr 和 str_replace 的效率问题
May 14 PHP
利用PHPStorm如何开发Laravel应用详解
Aug 30 PHP
Thinkphp3.2简单解决多文件上传只上传一张的问题
Sep 26 PHP
PHP按一定比例压缩图片的方法
Oct 12 PHP
php面试中关于面向对象的相关问题
Feb 13 PHP
Yii框架函数简单用法分析
Sep 09 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
laravel框架学习笔记之组件化开发实现方法
2020/02/01 PHP
Javascript中的数学函数
2007/04/04 Javascript
jQuery源码分析-05异步队列 Deferred 使用介绍
2011/11/14 Javascript
javascript获得服务器端控件的ID的实现代码
2011/12/28 Javascript
关于js日期转化为毫秒数“节省20%的效率和和节省9个字符“问题
2012/03/01 Javascript
js获取class的所有元素
2013/03/28 Javascript
键盘KeyCode值列表汇总
2013/11/26 Javascript
火狐下input焦点无法重复获取问题的解决方法
2014/06/16 Javascript
jQuery ajax serialize() 方法使用示例
2014/11/02 Javascript
JavaScript实现三阶幻方算法谜题解答
2014/12/29 Javascript
图解js图片轮播效果
2015/12/20 Javascript
mvc中form表单提交的三种方式(推荐)
2016/08/10 Javascript
js实现String.Fomat的实例代码
2016/09/02 Javascript
vue-resource调用promise取数据方式详解
2017/07/21 Javascript
VUE2实现事件驱动弹窗示例
2017/10/21 Javascript
JavaScript实现获取select下拉框中第一个值的方法
2018/02/06 Javascript
JavaScript 2018 中即将迎来的新功能
2018/09/21 Javascript
vue使用高德地图根据坐标定位点的实现代码
2019/08/22 Javascript
微信小程序实现上传多张图片、删除图片
2020/07/29 Javascript
[06:53]2018DOTA2国际邀请赛寻真——勇于创新的Vici Gaming
2018/08/14 DOTA
从Python的源码浅要剖析Python的内存管理
2015/04/16 Python
python 使用poster模块进行http方式的文件传输到服务器的方法
2019/01/15 Python
Python Web程序搭建简单的Web服务器
2019/07/31 Python
VS2019+python3.7+opencv4.1+tensorflow1.13配置详解
2020/04/16 Python
关于django python manage.py startapp 应用名出错异常原因解析
2020/12/15 Python
html5实现多文件的上传示例代码
2014/02/13 HTML / CSS
TripAdvisor斯洛伐克:阅读评论、比较价格和酒店预订
2018/04/25 全球购物
L’urv官网:精品女性运动服品牌
2019/07/07 全球购物
东方通信股份有限公司VC面试题
2014/08/27 面试题
网站编辑求职信
2013/10/17 职场文书
企业行政文员岗位职责
2013/12/03 职场文书
保护动物的标语
2014/06/11 职场文书
同意报考公务员证明
2015/06/17 职场文书
pandas提升计算效率的一些方法汇总
2021/05/30 Python
配置nginx负载均衡
2022/05/06 Servers
MySQL数据库表约束讲解
2022/06/21 MySQL