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 cookie 登录验证示例代码
Mar 16 PHP
php数组函数序列之ksort()对数组的元素键名进行升序排序,保持索引关系
Nov 02 PHP
php导出word格式数据的代码实例
Nov 25 PHP
PHP遍历目录函数opendir()、readdir()、closedir()、rewinddir()总结
Nov 18 PHP
php隐藏IP地址后两位显示为星号的方法
Nov 21 PHP
php array_slice 取出数组中的一段序列实例
Nov 04 PHP
PHP实现截取中文字符串不出现?号的解决方法
Dec 29 PHP
yii2学习教程之5种内置行为类详解
Aug 03 PHP
PHP基于自定义函数生成笛卡尔积的方法示例
Sep 30 PHP
PHP实现合并两个排序链表的方法
Jan 19 PHP
PHP 应用容器化以及部署方法
Feb 12 PHP
解决php写入数据库乱码的问题
Sep 17 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/05/11 PHP
在项目中寻找代码的坏命名
2012/07/14 PHP
PHP使用递归方式列出当前目录下所有文件的方法
2015/06/02 PHP
php字符集转换
2017/01/23 PHP
PHP中register_shutdown_function函数的基础介绍与用法详解
2017/11/28 PHP
使用js显示当前时间示例
2014/03/02 Javascript
javascript实现给定半径求出圆的面积
2015/06/26 Javascript
JS表格组件BootstrapTable行内编辑解决方案x-editable
2016/09/01 Javascript
Ztree新增角色和编辑角色回显问题的解决
2016/10/25 Javascript
基于LayUI分页和LayUI laypage分页的使用示例
2017/08/02 Javascript
微信小程序scroll-view组件实现滚动动画
2018/01/31 Javascript
node.js ws模块搭建websocket服务端的方法示例
2019/04/25 Javascript
jQuery层叠选择器用法实例分析
2019/06/28 jQuery
vue 使用element-ui中的Notification自定义按钮并实现关闭功能及如何处理多个通知
2019/08/17 Javascript
js tab栏切换代码实例解析
2019/09/03 Javascript
如何通过JS实现转码与解码
2020/02/21 Javascript
JS浏览器BOM常见操作实例详解
2020/04/27 Javascript
JavaScript设计模式--桥梁模式引入操作实例分析
2020/05/23 Javascript
Python中for循环和while循环的基本使用方法
2015/08/21 Python
python导出hive数据表的schema实例代码
2018/01/22 Python
解决python3 HTMLTestRunner测试报告中文乱码的问题
2018/12/17 Python
python 实现将txt文件多行合并为一行并将中间的空格去掉方法
2018/12/20 Python
Python递归函数特点及原理解析
2020/03/04 Python
Python异常原理及异常捕捉实现过程解析
2020/03/25 Python
Python爬虫爬取有道实现翻译功能
2020/11/27 Python
如何利用input事件来监听移动端的输入
2016/04/15 HTML / CSS
美国工业用品采购网站:Zoro.com
2020/10/27 全球购物
工商管理实习生自我鉴定范文
2013/12/18 职场文书
《灯光》教学反思
2014/02/08 职场文书
电气工程及其自动化专业毕业生自荐信
2014/06/21 职场文书
党员十八大心得体会
2014/09/12 职场文书
财务部岗位职责范本
2015/04/14 职场文书
防暑降温通知书
2015/04/27 职场文书
承诺书范本大全
2015/05/04 职场文书
JavaScript实现简单拖拽效果
2021/09/15 Javascript
Python中np.random.randint()参数详解及用法实例
2022/09/23 Python