基于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.点击确定之后,会跟着弹出应用 ...
随机推荐
- Eclipse 创建 Java 类
打开新建 Java 类向导 你可以使用新建 Java 类向导来创建 Java 类,可以通过以下途径打开 Java 类向导: 点击 "File" 菜单并选择 New > Cla ...
- Android开发——初步
一.项目结构介绍
- 嵌入式开发之davinci--- 8168 总的roi 编码
http://bbs.61dsp.com/forum.php?mod=viewthread&tid=767
- centos7 更换yum源为阿里云
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup curl -o /etc/yum.repos ...
- Android开发:《Gradle Recipes for Android》阅读笔记1.1
第一章1.1节 注:下面都是用android studio新建出来的默认项目配置,没有修改 1.settings.gradle记录了哪些子目录包含了它们自己的工程,例如:include':app',如 ...
- ADODB
转自网友,看着挺全就转了,供大家学习研究. Recordset 对象的属性1.CursorType 属性AdOpenForwardOnly: 仅向前游标,默认值.除了只能在记录中向前滚动外,与静态游标 ...
- css单行排版
text-overflow: ellipsis; overflow: hidden; white-space: nowrap;
- 记录--Gson、json转实体类、类转json
需要导入Gson jar包 最近在做一个java web service项目,需要用到jason,本人对java不是特别精通,于是开始搜索一些java平台的json类库. 发现了google的gson ...
- PHP判断是手机端访问还是PC端访问网站
Mobile_Detect 是一个轻量级的开源移动设备(手机)检测的 PHP Class, 它使用 User-Agent 中的字符串,并结合 HTTP Header,来检测移动设备环境. 这个设备检测 ...
- python模块学习(四)
re模块 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 C ...