日期:2014-05-17 浏览次数:20466 次
软件 php的源文件和安装包要一致
php5.3.8(VC9 x86 Thread Safe)
php5.3.8源文件(tar.bz2)
VC
bison.exe
MSYS(MSYS类似于Cygwin,但是由于工作原理的不同,速度更快、体积更小、功能强大、便于携带http://code.google.com/p/msys-cn/)
因为我的开发只是一个很简单的demo,没有使用第三方了类库。如果是把linux下拿过来的扩展项目,可能用到一些库。可能用cygwin会比较好。但是没有cygwin完全可以在window下开发。
1。解压下载到的源文件包tar.bz2包到C盘c:/phpsrc,并且解压php安装包(VC9 x86Thread Safe,也就是能够正常使用的php压缩包文件)到C:/php,我们只需要里面的一个文件C:/php/dev/ php5.lib,复制php5.lib到c:/phpsrc。
2。复制bison.exe到Microsoft Visual Studio\Common\MSDev98\Bin把Microsoft Visual Studio\Common\MSDev98\Bin的绝对路径添加到windows环境变量
3 .在这里我们开始生成生成config.w32.h。CMD在里面操作
进入:c:/phpsrc执行
C:\phpsrc>buildconf Rebuilding configure.js Now run 'configure --help'
?建立一个临时环境变量
C:\phpsrc>set path=%path%;C:/phpsrc/bin C:\phpsrc>cscript /nologo configure.js --with-php-build="../phpsrc" --without-libxml --disable-odbc
如果想要Non Thread Safe 模式就去掉上面的命令最后的参数--disable-zts
Saving configure options to config.nice.bat Checking for cl.exe ... <in default path> Detected compiler MSVC9 (Visual C++ 2008) Detected 32-bit compiler Checking for link.exe ... C:\Program Files\Microsoft Visual Studio 9.0\VC\BIN Checking for nmake.exe ... <in default path> Checking for lib.exe ... <in default path> ...........中间省略............. ------------------------------------------- | | | ------------------------------------------- | Build type | Release | | Thread Safety | Yes | | Compiler | MSVC6 (Visual C++ 6.0) | | Architecture | x86 | ------------------------------------------- Type 'nmake' to build PHP
如果出现上类似的提示, 说明你的PHP开发环境已经搭建成功,同时在main下面多了一个 config.w32.h。即PHP开发环境的配置文件。如果没有这个脚本,windows下开发php,简直太悲惨了。
?
4.开发PHP扩展的方法
到这里我们就可以建立开发PHP扩展了,但是无从下手,我们该怎么办,其实PHP也给我们提供了很好用的工具来建立一个PHP扩展的骨架。就是用C:\phpsrc\ext下的ext_skel_win32.php如何运行,以php结尾,说明依赖php。下面看具体方法,我建立一个名为’test‘的扩展。这里要确保你的php.exe可以直接在cmd下使用,具体还是加入Path路径 。虽然有ext_skel_win32.php,用php执行,但是我们不知道具体的内容。 其实执行如下命令:
C:\phpsrc\ext>php ext_skel_win32.php 'sh' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
ext_skel_win32.php源码中说要使用cygwin,但我机器上没有装cygwin,另外发现其中实际上只使用到了sh,而我机器上装的MSYS里也有sh,应该可以用的吧,于是就将ext_skel_win32.php中的$cygwin_path变量设置成了MSYS的BIN目录
$cygwin_path = 'c:\msys\1.0\bin';?
C:\phpsrc\ext>php ext_skel_win32.php ext_skel --extname=module [--proto=file] [--stubs=file] [--xml[=file]] [--skel=dir] [--full-xml] [--no-help] --extname=module module is the name of your extension --proto=file file contains prototypes of functions to create --stubs=file generate only function stubs in file --xml generate xml documentation to be added to phpdoc-cvs --skel=dir path to the skeleton directory --full-xml generate xml documentation for a self-contained extension (not yet implemented) --no-help don't try to be nice and create comments in the code and helper functions to test if the module compiled PHP Warning: fopen(/.php): failed to open stream: No such file or directory in C:\phpsrc\ext\ext_skel_win32.php on line 52 C:\phpsrc\ext>
?可以看到如何使用这php脚本。大体命令如下
c:\phpsrc\ext>php ext_skel_win32.php --extname=test Creating directory test Creating basic files: config.m4 config.w32 .svnignore test.c php_test.h CREDITS EXPERIMENTAL tests/001.phpt test.php [do ne]. To use your new extension, you will have to execute the following steps: 1. $ cd .. 2. $ vi ext/t