准备工具:
vc6.0
php 5.3.13 源码
bison编译工具
cygwin工具
配置安装工具并添加环境变量
包括:D:\bison\bin;D:\tools\Microsoft Visual Studio\VC98\Bin;D:\tools\Microsoft Visual Studio\Common\MSDev98\Bin;
首先,编译安装php源码:
解压php 5.3.13到D:\php-5.3.13
执行
D:\php-5.3.13>buildconf
Rebuilding configure.js
Now run 'configure --help'
建立一个临时环境变量 并编译php
D:\php-5.3.13>set path=%path%;D:/php-5.3.13/bin
D:\php-5.3.13>cscript /nologo configure.js --with-php-build="../php-5.3.13" --without-libxml --disable-odbc
表示编译成功,main下面多了一个 config.w32.h
修改 D:\php-5.3.13\ext 下的 ext_skel_win32.php 文件:
设定自己的cygwin路径
$cygwin_path = 'c:\cygwin64\bin';
执行骨架搭建文件 创建test扩展
D:\php-5.3.13\ext>php ext_skel_win32.php --extname=test
在ext下生成名为test的扩展文件夹
用vc6.0 打开test扩展项目
1. 修改php_test.h
扩展的新函数: 在PHP_FUNCTION(confirm_test_compiled); 行后添加一行
PHP_FUNCTION(confirm_test_compiled);
PHP_FUNCTION(test); // 新增的行
2. 修改test.c
在PHP_FUNCTION(confirm_test_compiled) 后添加我们的新函数
PHP_FUNCTION(test){
php_printf("Hello C extension");
}
在数组zend_function_entry test_functions[]增加一行
const zend_function_entry test_functions[] = {
PHP_FE(confirm_test_compiled, NULL) /* For testing, remove later. */
PHP_FE(test, NULL) // 新增的行
PHP_FE_END /* Must be the last line in test_functions[] */
};
1. 修改编译方式为release:
选择Build->Set Active Configuration设置默认编译方式为Release, 否则会提示缺少php5ts_debug.lib ,其实就是php5ts.lib。
2. 按F5编译。会在ext上级的Release_TS目录下生成php_test.dll
生成文件在可以放到wamp\php\ext\目录下
修改wamp\php\php.ini
在
[PHP]
添加,最后放在 extension= 最后
extension=php_test.dll
如果报错 php5ts.lib link.exe 的错误 请下载对应版本php二进制源码包 将dev\php5ts.lib 拷贝到 本项目下 ext\test 下
如果报错 :
..\..\main\streams/php_stream_transport.h(85) : error C2143: syntax error : missing ')' before '*'
..\..\main\streams/php_stream_transport.h(85) : error C2081: 'socklen_t' : name in formal parameter list illegal
还有一种不需要安装 cygwin 就可生产扩展骨架 的方法 具体参照
http://blog.163.com/023_dns/blog/static/11872736620126542553319/