2012年3月4日星期日

如何用VC2008编写PHP5的扩展


安装IIS7
以Windows 7为例,在光驱中放入和系统匹配的Windows安装光盘,依次打开“控制面板->程序->打开或关闭Windows功能”,选中“Internet信息服务”。为了让IIS支持PHP,记得勾选中“Internet信息服务->万维网服务->应用程序开发功能->CGI”。
测试
打开浏览器输入http://localhost或http://127.0.0.1。

安装PHP5
下载PHP5的同时,一并把源代码取下来,分别解压缩到C:\PHP-5.2.6 和 C:\PHP-5.2.6-src。把C:\PHP-5.2.6\php.ini-dist 并另存为 php.ini。
打开“IIS管理器->处理程序映射->添加模块映射”对话框,依次
a) 在请求路径中填写*.php;
b) 从模块的下拉列表中选择FastCgiModule;(1)
c) 在可执行文件中填写php-cgi.exe文件的完整路径,例如:C:\PHP-5.2.6\php-cgi.exe;
d) 在名称中随便填写,例如PHPCGI。
测试
添加c:\inetpub\wwwroot\index.php,内容为
打开浏览器输入http://localhost/index.php或http://127.0.0.1/index.php。

安装Cygwin
只要安装sh即可。(2)

生成扩展到源码框架
使用PHP源代码目录下的 ext/ext_skel_win32.php来生成扩展的骨架类。
配置环境变量
需要用到c:\php-5.2.6\php.ini和Cygwin,所以把C:\PHP-5.2.6和C:\Cygwin\bin添加到环境变量PATH中。
生成框架
执行cmd打开一个终端,进入php源代码的ext目录
C:\>cd \php-5.2.6-src\ext
执行php脚本,生产一个名为mytest的扩展到框架
C:\php-5.2.6-src\ext>php ext_skel_win32.php –extname=mytest
编译扩展
用VC2008打开c:\php-5.2.6-src\ext\mytest\mytest.dsp,确认转换工程,选择编译目标为Release_TS,这个时候编译会报一个找不到.lib的错误,在C:\PHP-5.2.6\dev中找到php5ts.lib并添加到项目的依赖中即可。重新正确地编译后,生成的目标库文件会自动保存在c:\php-5.2.6-src\Release_TS\php_mytest.dll。
测试
1) 把php_mytest.dll复制到C:\php-5.2.6\
2) 修改c:\php-5.2.6\php.ini,找到extension_dir = "./" (3)
添加一行extension=php_mytest.dll
3) 编辑c:\inetpub\wwwroot\index.php的内容,改成
4) 重启IIS服务
5) 打开浏览器输入http://localhost/index.php或http://127.0.0.1/index.php。
执行正确时会显示一条Congratulations!的话。

参考文献
在Win32下用VS2008编译PHP扩展 (http://jz123.cn/text/3033828.html)
Windows7 IIS7下以FastCgi和ISAPI方法安装配置PHP5教程(http://www.leapsoul.cn/?p=753)

备注
(1) 如果下拉列表中没有FastCgiModule,请参考章节 安装IIS7 重新确认已安装了“Internet信息服务->万维网服务->应用程序开发功能->CGI”。
(2) ext_skel_win32.php中说要使用Cygwin,实际上只使用到了sh,所以可以用其它sh替代,入MSYS。
(3) extension_dir = "./" 指定了PHP-5.2.6为扩展存放的路径。

没有评论: