windows中搭建php扩展开发环境
一、提前准备下载并安装vs2008下载php5.4.5程序:nts下载ts下载其中php二进制包分为vc6、vc8、vc9及ts和nts版本。vc6、vc8、vc9分别对应vc6、vc2005、vc2008ts表示(thread safe),当以isapi(iis server)允许时,因为是单进程中执行多线程,为避免内存泄漏和共享变量安全,建议使用ts版本。当以fast_cgi等以单一进程来执行,这样就无需进行线程的安全检查。
下载php5.4.5源码下载php-sdk下载msys,它包括windows下linux编译器的实现下载deps
下面的配置基础,以f:\php_stdio文件夹为基础
二、编译php首先下载php-sdk,先下载较新的php-sdk-binary-tools-20110915.zip,解压到
f:\php_stdio\php-sdk
目录下。注意,解压后,这个目录下应该有bin和script子目录。
开一个cmd窗口,切换到f:\php_stdio\php-sdk目录下,运行vcvarsall.bat来设置好编译环境变量。
vs2008安装路径\vc\vcvarsall.bat
这里vcvarsall.bat的具体目录要根据你自己的安装位置而定。
接着,进入在cmd窗口里继续运行以下命令:
bin\phpsdk_setvars.bat
bin\phpsdk_buildtree.bat php54dev
这样,在f:\php_stdio\php-sdk目录下又多了一个php54dev目录。
接着继续将deps解压到
f:\php_stdio\php-sdk\php54dev\vc9\x86\
目录下。原来这个目录下的deps目录下的所有子目录均是空目录,解压后,应该复制进很多必要的模块/扩展所需的库文件。
接下来,将php-5.4.5源码目录复制一份到
f:\php_stdio\php-sdk\php54dev\vc9\x86\
目录下。进入php源码目录
cd f:\php_stdio\php-sdk\php54dev\vc9\x86\php-5.4.5
运行
buildconf
然后就可以先试着编译php了。最开始,一般编译尽可能少的模块,先让核心能正常编译出来:
configure --disable-all --enable-cli
这一步的主要目的是生成config.w32.h,如果需要生成php,可以继续执行
nmake clean; nmakephp5.4最核心部分及一个命令行工具就编译出来了。nmake clean是为了避免遗留编译中间结果文件带来干扰。
三、创建新扩展my_fopenphp扩展的基础结构相同,为方便开发php提供了ext_skel和ext_skel_win32.php分别是linux、windows下的扩展骨架搭建工具。此次讲的是windows中搭建php扩展开发环境,所以使用的是ext_skel_win32.php。用它生成的新扩展骨架,可以直接用vs打开。
上图是ext_skel_win32.php支持的参数常用的主要是--extname和--proto:extname:指定扩展的名称proto:为了便于快速构建函数骨架,可以创建一个文件,并写入各函数的定义。
cd f:\php_stdio\php-sdk\php54dev\vc9\x86\php-5.4.5\extphp ext_skel_win32.php --extname=my_fopen
出现上述执行结果,表示新扩展骨架生成成功,现在打开f:\php_stdio\php-sdk\php54dev\vc9\x86\php-5.4.5\ext可以看到my_fopen文件夹。进入my_fopen可以看到my_fopen.dsp,它就是vs的项目文件。现在可以开发你想要的扩展程序了。
四、编译、使用扩展目前新建的扩展中并未创建任何函数接口,但默认的扩展为我们提供了一个测试的函数接口,默认函数的命名规则是:confirm_[extname]_compiled函数接口:tring confirm_[extname]_compiled(string)
1.用vs打开my_fopen.dsp2.设置项目属性-》配置属性-》c/c++-》代码生成,设置运行库:多线程 dll (/md)3.设置项目属性-》配置:切换到release_ts
4.设置项目属性-》配置属性-》c/c++-》高级,设置编译为:编译为 c 代码 (/tc)5.设置项目属性-》配置属性-》链接器》常规,设置输出文件:release_ts/php_my_fopen.dll。如果不设置,当编译生成扩展后,找起来会比较麻烦。所以这项设置不是必须的。6.设置项目属性-》配置属性-》链接器》常规,增加附加库目录:f:\php_work\php-5.4.5\dev如果不设置此选项,编译时会报:无法打开输入文件“php5ts.lib”
7.最后按f5,执行编译。会生成php_my_fopen.dll
成功1个,表示dll生成成功。
现在扩展已经编译成功,接下来是在php中使用它。8.拷贝php_my_fopen.dll至f:\php_work\php-5.4.5\ext下8.打开f:\php_work\php-5.4.5\php.ini,添加extension=ext/php_my_fopen.dll9.新建f:\php_work\test.php高级->编译为改为编译为c代码(/tc),链接器->附加库目录加一项php二进制包的dev目录。