我的环境是xp,vc++6.0和已经装好的php环境
如果需要编译现在环境的扩展,则需要去http://www.php.net/releases/这个地址找到和自己php版本一样的源码
这是我的版本
首先推荐大家看看这篇文章
http://php.chinaunix.net/manual/zh/install.windows.building.php
请大家认真读完这篇文章,然后按照文章所说,我们开始进行下面的步骤
下载2个工具
a)PHP 站点中的 win32 编译工具 » http://www.php.net/extra/win32build.zip
b)PHP 使用的 DNS 解析器的源代码:» http://www.php.net/extra/bindlib_w32.zip(将这个进行编译,然后替换win32build.zip中的resolv.lib)
下载完成后,将E:\Project\app\win32build\bin加入PATH目录下面,接下来
1.建立一个工作目录E:\Project\app
2.将php和上述两个工具全部解压至1的目录中,最后的层次应该是这样的,如下图:
【编译resovle.lib】
打开VC++,打开工作空间bindlib.dsw,然后直接build(F7),然后在他的DEBUG目录下面找到resolv.lib,复制,粘贴到E:\Project\app\win32build\lib,替换。
然后请大家再来参考这篇文章http://aiyooyoo.com/index.php/archives/212/
我们先从(11)条开始看
1.执行buildconf.bat,效果如下:
2.执行:cscript /nologo configure.js --with-php-build="../win32build" --without-libxml --disable-odbc,可以执行cscript /nologo configure.js --help查看帮助
这个用红线框出来的,就是我们后面编译扩展时候需要的文件。
3.执行下图的代码,增加自己的php扩展(HelloWorld)
然后查看自己的ext目录下面,多了一个HelloWorld
4.用VC++打开HelloWorld这个工程
a)打开php_HelloWorld.h这个文件,增加如下代码
PHP_FUNCTION(confirm_HelloWorld_compiled); /* For testing, remove later. */ PHP_FUNCTION(PhpTestFunc);//yimiao add
b)打开HelloWorld.c这个文件,增加如下两段代码
/* {{{ HelloWorld_functions[] * * Every user visible function must have an entry in HelloWorld_functions[]. */ const zend_function_entry HelloWorld_functions[] = { PHP_FE(confirm_HelloWorld_compiled, NULL) /* For testing, remove later. */ PHP_FE(PhpTestFunc, NULL) {NULL, NULL, NULL} /* Must be the last line in HelloWorld_functions[] */ };
PHP_FUNCTION(PhpTestFunc) { php_printf("this is a test function"); }
c)编译,编译的时候会出错,解决方法请参照上述文章中的(12)进行解决。继续编译,如果还是有错,提示
LINK : fatal error LNK1181: cannot open input file "php5ts.lib",然后从你自己在windows上安装的PHP环境中找到这个文件,然后拷贝到现在源码包的根目录下,继续编译
需要在工具-》选项-》目录中(library和include),添加php所在的目录
如果不出意外就可以成功了,有点奇怪的是我的dll文件并没有出现在hellowordl下面的release,而是出现在E:\Project\app\php5.3\Release_TS下面。
然后拷贝到你的php环境ext目录下面,打开扩展。查看phpinfo。
最后编写个测试页面,调用里面的函数PhpTestFunc。OK至此,扩展添加结束。