环境:win7 + vs2008 + cygwin + webserver环境(php5.2.13) php5.2.15源码包 生成过程如下: 1、环境配置,安装cygwin,这个在生成PHP扩展的框架时有用到,我的安装目录为e:\cygwin 下载地址http://www.cygwin.com/setup.exe 2、安装webserver 下载地址 http://blog.lrenwang.com/down/other/webserver.rar 3、下载php5.2.15源码包,下载地址:http://www.php.net/get/php-5.2.15.tar.gz/from/this/mirror (我的是在D:\webserver\c\php) D:\webserver\c\php\ext_skel_win32.php中的$cygwin_path变量设置成了MSYS的BIN目录 $cygwin_path = 'e:\cygwin\bin'; 4、安装vs2008,这个时间会久一些 5、如果以上的一切都安装好了,那么转第6步,我们开始开发扩展test 6、在命令行中,cd进入D:\webserver\c\php\ext\目录,输入D:\webserver\php\php.exe ext_skel_win32.php --extname=test, 此时在ext目录下会生成test文件夹及在此文件夹下与扩展相关的文件,包括php_test.h,test.c文件等。 如果php.exe所在目录没有加到PATH中,请在php.exe前面加程序的完整路径 7、打开vs2008,新建基于已有文件的项目,选择VC++,选择文件所在目录,输入项目名称 php_test , 下一步,在项目类型:中选择 动态链接库,next直到完成。 8、修改源码, 打开php_test.h文件,找到PHP_FUNCTION(confirm_test_compiled);在其下面增加一个扩展函数声明:PHP_FUNCTION(test_echo); 打开test.c文件,找到zend_function_entry test_functions[],在其元素中添加 PHP_FE(test_echo, NULL) 在test.c文件中添加如下代码 PHP_FUNCTION(test_echo) { char *arg = NULL; int arg_len, len; char *strg; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) { return; } len = spprintf(&strg, 0, "This is %s's extension.the input string is %s.", "test", arg); RETURN_STRINGL(strg, len, 0); } 9、按F7 build此项目,此时会有文件找不到报错,此乃php部分源码没有包含的原因,右键项目属性, 选择【属性配置】-> 【C/C++】-> 【常规】-> 【附加包含目录】, 将源码根目录,main目录,TSRM目录,Zend目录添加到此处我的是 (”D:\webserver\c\php;D:\webserver\c\php\main;D:\webserver\c\php\TSRM;D:\webserver\c\php\Zend”) 10、继续build,此时可能会显示zend_config.h文件找不到,此时为部分宏没有定义,解决方案: 选择项目属性,选择【属性配置】-> 【C/C++】-> 【预定义】-> 【预定义处理器】,在此处理添加 ZEND_DEBUG=0;COMPILE_DL_test;ZTS;ZEND_WIN32;PHP_WIN32;HAVE_test=1; 对于不同的扩展可以将COMPILE_DL_test和HAVE_test中的test替换成你的扩展名 12、继续build,此时可能会显示fatal error LNK1120, 解决方案:打开项目属性,选择【属性配置】-> 【连接器】->【输入】->【Additional Dependencies】,在此处添加php5ts.lib, D:\webserver\c\php\dev\php5ts.lib 另外需要在【工具】->【选项】->【项目和解决方案】->【VC++ 目录】,在【显示以下内容目录:】下拉中,选择库文件,将php5ts.lib所在的路径添加进来,此文件存在于 二进制版本的dev/lib目录下。 13、右键solution属性,将Configuration选择为Release 14、build,在ext\test\Release下会有生成你一个以你的项目名为名称的dll文件(我的为php_test.dll) 15、将php_test.dll文件拷贝到机器中运行的php所在的ext目录,修改php.ini文件,添加一行:extension=php_test.dll,重启apache, 16,运行一个包含了 echo test_echo(”phppan.com”);语句的php文件,可以看到有输出This is test’s extension.the input string is phppan.com. 如果你在启动apache中有报错为: PHP Warning: PHP Startup: test: Unable to initialize module\nModule compiled with build ID=API20090626,TS\nPHP compiled with build ID=API20090626,TS,VC6\nThese options need to match\n in Unknown on line 0 Warning: PHP Startup: test: Unable to initialize module Module compiled with build ID=API20090626,TS PHP compiled with build ID=API20090626,TS,VC6 These options need to match in Unknown on line 0 你需要在main/config.w32.h中添加如下语句 #define PHP_COMPILER_ID “VC6″
vs2008 开发php,win7下用vs2008开发PHP扩展
最新推荐文章于 2021-03-22 21:38:17 发布
本文详细介绍了如何在Win7系统中,使用Visual Studio 2008和Cygwin环境编译PHP5.2.15的扩展。步骤包括安装Cygwin和Web服务器,下载PHP源码,配置VS2008,创建并修改扩展源码,解决编译过程中遇到的问题,最后将DLL文件放入PHP扩展目录并启用。
摘要由CSDN通过智能技术生成