一、cmd进入命令行模式,并进入php-5.6.20-src/ext源代码的ext目录下
输入命令php ext_skel_win32.php --extname=HelloWord
,执行结果以下图:php
执行后在ext目录下多了HelloWord
文件夹服务器
文件夹中的HelloWord.dsp
是Viscual C++的工程文件函数
从php的安装目录中的dev文件夹下,找到php5ts.lib
,复制到建立的HelloWord扩展目录下测试
用Vs2012打开HelloWord.dsp
工程文件,调试模式选择Release
模式,ui
F5启动调试,发生错误,提示以下:c:\php-5.6.20-src\zend\zend_config.w32.h(25): fatal error C1083: 没法打开包括文件:“../main/config.w32.h”: No such file or directory
spa
说明main/config.w32.h
文件缺失,网上搜索了诸多办法,均失效,或许是之前的版本有效,如今这里提供正确的解决办法:命令行
添加config.w32.h
文件
在php源代码文件目录里搜索config.w32.h
,在C:\php-5.6.20-src\win32\build
文件夹里找到config.w32.h.in
,将这个文件复制到C:\php-5.6.20-src\main
文件夹里,去掉后面的.in
。
注意:为了让扩展能和php运行环境严格匹配,要根据你的php运行环境的编译版本(php5.6.20是VC11编译的),在config.w32.h
文件里加上:#define PHP_COMPILER_ID "VC11"
3d
此时再从新编译,编译成功,在php-5.6.20-src目录下生成了Release_TS
目录,里面有生成的扩展文件php_HelloWord.dll
调试
此时咱们将php_HelloWord.dll
拷贝到C:/php/ext
目录下,并设置php.ini文件增长extension=php_HelloWord.dll
,并重启Apache服务器
此时咱们用phpinfo()
函数测试,发现已经成功安装了php_HelloWord.dll扩展code
打开HelloWord.c文件
找到以下函数:
PHP_FUNCTION(confirm_HelloWord_compiled) { 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, "Congratulations! You have successfully modified ext/%.78s/config.m4. Module %.78s is now compiled into PHP.", "HelloWord", arg); RETURN_STRINGL(strg, len, 0); }
在下面增长函数HelloPHP
PHP_FUNCTION(HelloPHP) { RETURN_STRING("Hello PHP Ext!", 1); }
找到以下代码:
const zend_function_entry HelloWord_functions[] = { PHP_FE(confirm_HelloWord_compiled, NULL) /* For testing, remove later. */ PHP_FE_END /* Must be the last line in HelloWord_functions[] */ };
并修改以下:
const zend_function_entry HelloWord_functions[] = { PHP_FE(confirm_HelloWord_compiled, NULL) /* For testing, remove later. */ PHP_FE(HelloPHP, NULL) PHP_FE_END /* Must be the last line in HelloWord_functions[] */ };
从新编译,生成php_HelloWord.dll
此时将php_HelloWord.dll复制到php/ext目录下,咱们编写测试php代码以下:
<?php echo HelloPHP(); ?>
能够看到执行结果:
自此第一个简单的扩展开发完成!