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!的更多相关文章

  1. 基于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旗舰 ...

  2. 在Visual Studio 2012中使用VMSDK开发领域特定语言(二)

    本文为<在Visual Studio 2012中使用VMSDK开发领域特定语言>专题文章的第二部分,在这部分内容中,将以实际应用为例,介绍开发DSL的主要步骤,包括设计.定制.调试.发布以 ...

  3. 在Visual Studio 2012中使用VMSDK开发领域特定语言(一)

    前言 本专题主要介绍在Visual Studio 2012中使用Visualization & Modeling SDK进行领域特定语言(DSL)的开发,包括两个部分的内容.在第一部分中,将对 ...

  4. 在Visual Studio 2012中使用VMSDK开发领域特定语言1

    在Visual Studio 2012中使用VMSDK开发领域特定语言(一)   前言 本专题主要介绍在Visual Studio 2012中使用Visualization & Modelin ...

  5. 【转】visual studio 2012进行C语言开发[图文]

    原文网址:http://blog.csdn.net/chengyafei0104/article/details/9826025 现在大家计算机大概都脱离XP了,so,之前蛮多可以用的编译器,可能放在 ...

  6. visual studio 2012进行C语言开发[图文]

    现在大家计算机大概都脱离XP了,so,之前蛮多可以用的编译器,可能放在我们现在的Win7,win8下面会出现一些比如不兼容了之类的问题.其实,用微软强大的IDE-visual studio系列,也是可 ...

  7. 用Visual Studio 2012+Xamarin搭建C#开发Andriod的环境

    第一步:安装Visual Studio: Visual Studio 2012(或者Visual Studio 2010),原因是目前为止Xamarin for Visual Studio的插件只支持 ...

  8. 基于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   ...

  9. 使用 Visual Studio 2012进行C语言开发

    1.打开visual studio,选择菜单[文件]->[新建]->[项目],将会弹出新建项目对话框 2.在弹出的新建项目对话框中,选择和填补相应的属性. 3.点击确定之后,会跟着弹出应用 ...

随机推荐

  1. Mysql事务-隔离级别

    MYSQL事务-隔离级别 事务是什么? 事务简言之就是一组SQL执行要么全部成功,要么全部失败.MYSQL的事务在存储引擎层实现. 事务都有ACID特性: 原子性(Atomicity):一个事务必须被 ...

  2. Linux命令之umask

    一 权限掩码umask umask是chmod配套的,总共为4位(gid/uid,属主,组权,其它用户的权限),不过通常用到的是后3个,例如你用chmod 755 file(此时这文件的权限是属主读( ...

  3. node.js 入门

    什么是Node.js?还服务器端javascript?对于这个概念我在这篇文章不做解释,可以自己去搜索了解下,服务器端js不是新技术,只是最近的node.js的火爆让他爆发了,我会在以后的文章里解释什 ...

  4. weex - 创建项目

    初始化 请确保你已经安装了 Node.js,然后全局安装 weex-toolkit. npm install weex-toolkit -g 这条命令会向你命令行环境中注册一个 weex 命令.你可以 ...

  5. Android无线测试之—UiAutomator UiDevice API介绍六

    一.灭屏和唤醒屏幕相关知识: 1)灭屏:按电源键将屏幕熄灭 2)唤醒屏幕:在灭屏状态下按电源键唤醒屏幕 二.灭屏与唤屏相关的API: 返回值 方法名 描述 void wakeUp() 模拟按电源键,如 ...

  6. 【BZOJ2793】[Poi2012]Vouchers 调和级数

    [BZOJ2793][Poi2012]Vouchers Description 考虑正整数集合,现在有n组人依次来取数,假设第i组来了x人,他们每个取的数一定是x的倍数,并且是还剩下的最小的x个.正整 ...

  7. border inset outset ,border-radius

    1. 例子: div{ width:256px; height:256px; border: 10px inset #f00; margin:0 auto; border-radius:255px; ...

  8. UIApplication的理解

    iPhone应用程序是由主函数main启动,它负责调用UIApplicationMain函数,该函数的形式如下所示: int UIApplicationMain ( int argc, char *a ...

  9. ECMAScript6补全字符串长度方法padStart()和padEnd()

    一.padStart() 1.定义 padStart()方法用另一个字符串(默认为空格)重复填充到对象字符串到指定长度,填充从对象字符串左侧开始,返回新的字符串. 2.语法 str.padStart( ...

  10. ehcache 配置持久化到硬盘(四)

    Ehcache默认配置的话 为了提高效率,所以有一部分缓存是在内存中,然后达到配置的内存对象总量,则才根据策略持久化到硬盘中,这里是有一个问题的,假如系统突然中断运行 那内存中的那些缓存,直接被释放掉 ...