现在的位置: 首页 > 综合 > 正文

Windows下编译PHP的C扩展

2012年11月22日 ⁄ 综合 ⁄ 共 1838字 ⁄ 字号 评论关闭

我的环境是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至此,扩展添加结束。

抱歉!评论已关闭.