php开发扩展环境的搭建(Windows)
php开发扩展环境的搭建(Windows)
前期准备:
(1) 下载php-5.3.10源码包(php-5.3.10.tar.bz2)并解压到C:\php-5.3.10;下载二进制包php-5.3.10-Win32-VC9-x86.zip,也解压到C:\php-5.3.10,重复的文件全部覆盖。
(2) 下载php-sdk-binary-tools-20110915.zip,并解压到C盘下,并将解压后的bin目录添加到系统变量。
(3) 命令行就如C:\php-5.3.10,输入buildconf.bat。 //生成configure.js
(4)输入cscript /nologo configure.js --with-php-build="../win32build" --without-libxml --disable-odbc //生成config.win32.h
(5)修改config.win32.h(与编译php源码的编译版本相同)
一 使用自动构建工具搭建php扩展(php源码目录下运行)
Php ext_skel_win32.php –extname=hello
注:myext扩展名
生成如下:
二 添加依赖的php5ts.lib
将php二进制包中的dev目录下的php5ts.lib拷贝到你的扩展目录中
三 编写自己的函数
(1)修改php_hello.h文件
扩展新的函数:在PHP_FUNCTION(confirm_myhello_compiled);行后添加一行 PHP_FUNCTION(exttest); //exttest为函数名
(2)修改hello.c 文件
在数组zend_function_entry myhello_functions[]增加一行
1. zend_function_entry myhello_functions[] = {
2. PHP_FE(confirm_myhello_compiled, NULL) /* For testing, remove later. */
3. PHP_FE(exttest, NULL) // 新增的行
4. {NULL, NULL, NULL} /* Must be the last line in myhello_functions[] */
5. };
在PHP_FUNCTION(confirm_myhello_compiled) 后添加我们的新函数
PHP_FUNCTION(exttest) {
char *arg = NULL;
int n1,n2;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &n1, &n2) == FAILURE) { return; }
RETURN_LONG(n1+n2);
}
四 构建dll扩展文件 (vc9(vs2008)为最低版本)
vs2008打开hello.dsp,选择编译方式为Release_TS,然后开始编译,或者在通过命令行进入ext/hello 执行 msdev hello.dsp /MAKE “hello - Win32 Release_TS” 如果成功,则会在ext同级目录Release_TS中生成php_hello.dll。
五 测试
<?php
echo confirm_firstext_compiled('firstext');
echo '<br/>1+2='; echo exttest(1,2);
?>
Tips(错误):
(1)无php5ts.lib文件:将C:\php-5.3.10\dev\php5ts.lib拷贝到myextension目录下
(2)没有找到cl.exe(加入vs2008的环境变量)
(3)"sh" 下载cygwin,并修改ext_skel_win32.php的path
(4)其它错误参考原文
原文地址:
http://blog.csdn.net/u013927110/article/details/44020675
http://blog.csdn.net/qian_f/article/details/27205567
最新文章
- 实用篇!Asp.Net数据传输压缩
- 【JavaScript】【CSS】前端规则摘抄
- Codeforces Round #228 (Div. 1) A
- MVC之Razor语法
- 将获得到的json赋值到下拉框
- redis的发布订阅模式
- java中的容器问题
- Redis文档
- acdream 小晴天老师系列——竖式乘法(简单穷举)
- GRUB启动管理器
- 一段代码让你秒懂java方法究竟是传值还是传地址
- WKWebView的使用与JS交互详细解读
- 20个开发人员非常有用的Java功能代码
- 【转】VMware 克隆 Linux 系统后找不到 eth0 网卡问题
- 关于CTO角色的认知
- 跟随我在oracle学习php(16)
- The 2018 ACM-ICPC Asia Qingdao Regional Contest(部分题解)
- D - Bridge
- 数据层的多租户浅谈(SAAS多租户数据库设计)
- 【ASP.Net】 http请求中get,put,post,delete的区别与使用总结
热门文章
- node获取请求参数的方法get与post请求
- vue uni-app项目中的tabbar
- flume伪分布式安装
- HotSpot学习(二):虚拟机的启动过程源码解析
- 项目中处理数据常用Excel公式
- Popup中ListBox的SelectChange事件关闭弹出窗体后主窗体点击无效BUG
- 写给小白看的Mysql事务
- Azure Terraform(五)利用Azure DevOps 实现自动化部署基础资源
- 【Linux】ABRT has detected 1 problem(s). For more info run: abrt-cli list --since 1548988705
- DNS基础概要