基于Visual c++ 2012的php扩展开发 - HelloWord!
1、cmd进入命令行模式,并进入php-5.6.20-src/ext源代码的ext目录下
输入命令php ext_skel_win32.php --extname=HelloWord,执行结果如下图:
执行后在ext目录下多了HelloWord文件夹

文件夹中的HelloWord.dsp是Viscual C++的工程文件

从php的安装目录中的dev文件夹下,找到php5ts.lib,复制到创建的HelloWord扩展目录下
用Vs2012打开HelloWord.dsp工程文件,调试模式选择Release模式,

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

说明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

此时我们将php_HelloWord.dll拷贝到C:/php/ext目录下,并设置php.ini文件增加extension=php_HelloWord.dll,并重启Apache服务器
此时我们用phpinfo()函数测试,发现已经成功安装了php_HelloWord.dll扩展

打开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();
?>
可以看到执行结果:

自此第一个简单的扩展开发完成!
基于Visual c++ 2012的php扩展开发 - HelloWord!的更多相关文章
- 基于Visual c++ 2012的php扩展开发 - 环境搭建
软件准备 Apache2.4 php-5.6.20-Win32-VC11-x86 php-5.6.20-src mysql-5.5.45-win32 vcredist_x86.exe vs2012旗舰 ...
- 在Visual Studio 2012中使用VMSDK开发领域特定语言(二)
本文为<在Visual Studio 2012中使用VMSDK开发领域特定语言>专题文章的第二部分,在这部分内容中,将以实际应用为例,介绍开发DSL的主要步骤,包括设计.定制.调试.发布以 ...
- 在Visual Studio 2012中使用VMSDK开发领域特定语言(一)
前言 本专题主要介绍在Visual Studio 2012中使用Visualization & Modeling SDK进行领域特定语言(DSL)的开发,包括两个部分的内容.在第一部分中,将对 ...
- 在Visual Studio 2012中使用VMSDK开发领域特定语言1
在Visual Studio 2012中使用VMSDK开发领域特定语言(一) 前言 本专题主要介绍在Visual Studio 2012中使用Visualization & Modelin ...
- 【转】visual studio 2012进行C语言开发[图文]
原文网址:http://blog.csdn.net/chengyafei0104/article/details/9826025 现在大家计算机大概都脱离XP了,so,之前蛮多可以用的编译器,可能放在 ...
- visual studio 2012进行C语言开发[图文]
现在大家计算机大概都脱离XP了,so,之前蛮多可以用的编译器,可能放在我们现在的Win7,win8下面会出现一些比如不兼容了之类的问题.其实,用微软强大的IDE-visual studio系列,也是可 ...
- 用Visual Studio 2012+Xamarin搭建C#开发Andriod的环境
第一步:安装Visual Studio: Visual Studio 2012(或者Visual Studio 2010),原因是目前为止Xamarin for Visual Studio的插件只支持 ...
- 基于Visual C++2012拆解世界五百强面试题--题3
请用C语言实现 输入N,打印N*N矩阵 比如 N = 3, 打印: 1 2 3 8 9 4 7 6 5 N = 4, 打印 1 2 3 4 12 13 14 5 11 16 ...
- 使用 Visual Studio 2012进行C语言开发
1.打开visual studio,选择菜单[文件]->[新建]->[项目],将会弹出新建项目对话框 2.在弹出的新建项目对话框中,选择和填补相应的属性. 3.点击确定之后,会跟着弹出应用 ...
随机推荐
- Tomcat (7.0)数据源配置
在Tomcat这个Java Web容器下通过配置DataSource(数据源)对象能够解决上面所述的问题. JDBC中的javx.sql.DataSource接口负责建立于数据库的连接.程序中直接从数 ...
- android EditText 限定中文个数与英文个数的解决方式
EditText 限定中文8个英文16个的解决方法. 在EditText上控件提供的属性中有限定最大最小长度的方法. 可是,对于输入时,限定中文8个英文16个时,怎么办?相当于一个中文的长度是两个英文 ...
- mysql增加自定义函数功能
mysql默认是不能自定义函数的 当create function时 This function has none of DETERMINISTIC, NO SQL, or READS SQL DAT ...
- awk合并两个文件并显示
问题: 答案:
- Win7 sql2005附加数据库失败 错误5120
错误信息如下: 标题: Microsoft SQL Server Management Studio Express------------------------------ 附加数据库 对于 ...
- go build说明
go build命令用于编译我们指定的源码文件或代码包以及它们的依赖包. 例如,如果我们在执行go build命令时不后跟任何代码包,那么命令将试图编译当前目录所对应的代码包.例如,我们想编译goc2 ...
- 巨蟒python全栈开发django8:基于对象和基于双下划线的多表查询
1.编辑删除&&多对多关系的其他方法 提交,数据,得到结果 查看运行 给编辑和删除,添加样式 我们点击删除,可以成功删除 打印sql语句的,在settings.py里边的配置 LOGG ...
- /cloudmonitor.log 主机监控
989866842 INFO 2018-09-30 01:38:58.58 [ricGatherServiceHttp] 提交指标完成,耗时:18ms. SystemInfo [serialNumbe ...
- <2013 08 26> 雅思听力相关
近两日开始接触雅思题型,初步做了6套剑桥雅思题的听力部分,完成情况还可以,这里做个总结. 1.听力总共约40左右道题目,30min左右完成,结束后有十分钟把答案写到答题卷上.所有听力材料都只播放一遍! ...
- Date、Calendar、DateFormat、SimpleDateFormat、Timer、TimerTask类
类 Date 在 JDK 1.1 之前,类 Date 有两个其他的函数.它允许把日期解释为年.月.日.小时.分钟和秒值. 它也允许格式化和解析日期字符串.不过,这些函数的 API 不易于实现国际化.从 ...