基于Visual c++ 2012的php扩展开发 - HelloWord!
2017-02-13 16:03
603 查看
1、cmd进入命令行模式,并进入php-5.6.20-src/ext源代码的ext目录下
输入命令
![](https://images2015.cnblogs.com/blog/98678/201702/98678-20170213155946238-1507900139.png)
执行后在ext目录下多了
![](https://images2015.cnblogs.com/blog/98678/201702/98678-20170213155957910-45522752.png)
文件夹中的
![](https://images2015.cnblogs.com/blog/98678/201702/98678-20170213160019238-1816740411.png)
从php的安装目录中的dev文件夹下,找到
用Vs2012打开
![](https://images2015.cnblogs.com/blog/98678/201702/98678-20170213160036472-1435802604.png)
F5启动调试,发生错误,提示如下:
![](https://images2015.cnblogs.com/blog/98678/201702/98678-20170213160052597-153442083.png)
说明
添加
在php源代码文件目录里搜索
注意:为了让扩展能和php运行环境严格匹配,要根据你的php运行环境的编译版本(php5.6.20是VC11编译的),在
此时再重新编译,编译成功,在php-5.6.20-src目录下生成了
![](https://images2015.cnblogs.com/blog/98678/201702/98678-20170213160108472-1650598073.png)
此时我们将
此时我们用
![](https://images2015.cnblogs.com/blog/98678/201702/98678-20170213160127972-444771689.png)
打开HelloWord.c文件
找到如下函数:
在下面增加函数HelloPHP
找到如下代码:
并修改如下:
重新编译,生成php_HelloWord.dll
此时将php_HelloWord.dll复制到php/ext目录下,我们编写测试php代码如下:
可以看到执行结果:
![](https://images2015.cnblogs.com/blog/98678/201702/98678-20170213160254082-65776323.png)
自此第一个简单的扩展开发完成!
输入命令
php ext_skel_win32.php --extname=HelloWord,执行结果如下图:
![](https://images2015.cnblogs.com/blog/98678/201702/98678-20170213155946238-1507900139.png)
执行后在ext目录下多了
HelloWord文件夹
![](https://images2015.cnblogs.com/blog/98678/201702/98678-20170213155957910-45522752.png)
文件夹中的
HelloWord.dsp是Viscual C++的工程文件
![](https://images2015.cnblogs.com/blog/98678/201702/98678-20170213160019238-1816740411.png)
从php的安装目录中的dev文件夹下,找到
php5ts.lib,复制到创建的HelloWord扩展目录下
用Vs2012打开
HelloWord.dsp工程文件,调试模式选择
Release模式,
![](https://images2015.cnblogs.com/blog/98678/201702/98678-20170213160036472-1435802604.png)
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
![](https://images2015.cnblogs.com/blog/98678/201702/98678-20170213160052597-153442083.png)
说明
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"
此时再重新编译,编译成功,在php-5.6.20-src目录下生成了
Release_TS目录,里面有生成的扩展文件
php_HelloWord.dll
![](https://images2015.cnblogs.com/blog/98678/201702/98678-20170213160108472-1650598073.png)
此时我们将
php_HelloWord.dll拷贝到
C:/php/ext目录下,并设置php.ini文件增加
extension=php_HelloWord.dll,并重启Apache服务器
此时我们用
phpinfo()函数测试,发现已经成功安装了php_HelloWord.dll扩展
![](https://images2015.cnblogs.com/blog/98678/201702/98678-20170213160127972-444771689.png)
打开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(); ?>
可以看到执行结果:
![](https://images2015.cnblogs.com/blog/98678/201702/98678-20170213160254082-65776323.png)
自此第一个简单的扩展开发完成!
相关文章推荐
- 基于Visual c++ 2012的php扩展开发 - 环境搭建
- 如何基于 PHP-X 快速开发一个 PHP 扩展
- 使用php开发,基于swoole扩展开发的工具 swoole-crontab
- 基于Swoole开发PHP扩展
- php实现基于微信公众平台开发SDK(demo)扩展的方法
- php实现基于微信公众平台开发SDK(demo)扩展的方法
- php实现基于微信公众平台开发SDK(demo)扩展的方法
- php扩展开发---通过嵌入包装实现cli功能
- php扩展开发---区分系统加载epoll或者kqueue
- php开发扩展之PHP_FE宏替换
- windows下开发PHP扩展(无需Cygwin)
- 快速开发一个PHP扩展
- 基于swoole扩展实现真正的PHP数据库连接池
- PHP扩展开发之PHP的启动与终止
- windows下开发PHP扩展dll(无需Cygwin)
- PHP扩展开发(3):初始化文件
- php 创建一个扩展开发环境的正确姿势
- 微软Visual C++项目组征求开发人员意见以规划下一个版本(继Visual C++2010之后的强悍版本Visual C++2012)
- Linux/Ubuntu下C语言开发PHP的.so扩展模块过程
- 第55篇 Chrome扩展USB开发(一)及PHP研究 Saturday