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

最新文章

  1. 实用篇!Asp.Net数据传输压缩
  2. 【JavaScript】【CSS】前端规则摘抄
  3. Codeforces Round #228 (Div. 1) A
  4. MVC之Razor语法
  5. 将获得到的json赋值到下拉框
  6. redis的发布订阅模式
  7. java中的容器问题
  8. Redis文档
  9. acdream 小晴天老师系列——竖式乘法(简单穷举)
  10. GRUB启动管理器
  11. 一段代码让你秒懂java方法究竟是传值还是传地址
  12. WKWebView的使用与JS交互详细解读
  13. 20个开发人员非常有用的Java功能代码
  14. 【转】VMware 克隆 Linux 系统后找不到 eth0 网卡问题
  15. 关于CTO角色的认知
  16. 跟随我在oracle学习php(16)
  17. The 2018 ACM-ICPC Asia Qingdao Regional Contest(部分题解)
  18. D - Bridge
  19. 数据层的多租户浅谈(SAAS多租户数据库设计)
  20. 【ASP.Net】 http请求中get,put,post,delete的区别与使用总结

热门文章

  1. node获取请求参数的方法get与post请求
  2. vue uni-app项目中的tabbar
  3. flume伪分布式安装
  4. HotSpot学习(二):虚拟机的启动过程源码解析
  5. 项目中处理数据常用Excel公式
  6. Popup中ListBox的SelectChange事件关闭弹出窗体后主窗体点击无效BUG
  7. 写给小白看的Mysql事务
  8. Azure Terraform(五)利用Azure DevOps 实现自动化部署基础资源
  9. 【Linux】ABRT has detected 1 problem(s). For more info run: abrt-cli list --since 1548988705
  10. DNS基础概要