windows下配置php5.5开发环境及开发扩展


Posted in PHP onDecember 25, 2014

网上的教程是比较多的,但是我发现在windows下的扩展开发比较少,而且大多都是php5.3版本以前的,今天我就给大家讲解一下php扩展开发,我就拿php5.5的版本来说明一下的了

windows环境(我个人的)

windows 8.1 企业版(mac os Boot Camp安装的)

Visual Studio 2012 版本

msysgit  (http://msysgit.github.io/ 下载)

php-sdk-binary-tools-20110915.zip (http://windows.php.net/downloads/php-sdk/下载)

deps-5.5-vc11-x86.7z                  (http://windows.php.net/downloads/php-sdk/下载)

php-5.5.20                        (http://php.net/downloads.php下载,这个版本不定自己选择)

第一步
解压php-sdk-binary-tools的二进制包,譬如我解压到我的C:\php-sdk文件夹中,现在的目录结构如下

C:\php-sdk

    --bin

    --script

    --share

然后,这个是你已经安装完成了visual studio 2012,打开VS2012 Native Tools Command Prompt命令行工具

#进入目录

cd C:\php-sdk

#设置环境变量

bin\phpsdk_setvars.bat

#创建常用的php-sdk目录

bin\phpsdk_buildtree.bat phpdev

如果我们打开bin\phpsdk_buildtree.bat文件就会发现它只创建到VC9,没有VC11,但是我们如果开发php5.5版本,我们需要的是VC11,这时候我们就要把C:\php-sdk\phpdev\vc9复制一份到C:\php-sdk\phpdev\vc11,现在的目录结构如下:

C:\php-sdk\phpdev\

                --vc6

                --vc8

                --vc9

                --vc11

因为我下载的deps-5.5-vc11-x86.7z,所以我要解压deps-5.5-vc11-x86.7z到C:\php-sdk\phpdev\vc11\x86\deps文件夹下覆盖,里边都是我们需要的库文件和一些必要的工具等等。
然后,将我们下载的php-5.5.20.tar.bz2解压到C:\php-sdk\phpdev\vc11\x86\php-5.5.20文件夹中。

编译安装php

回到VS2012 Native Tools Command Prompt
#进入php源目录文件夹
cd c:\php-sdk\phpdev\vc11\x86\php-5.5.20
buildconf
#查看带的扩展和编译命令
configure --help
php-sdk

如果你没有安装php,现在这里就帮助到你了,可以先编译安装一下php
configure --disable-all --enable-cli
然后,你会看到Type 'nmake' to build PHP,然后编译
nmake
在C:\php-sdk\phpdev\vc11\x86\php-5.5.20\Release_TS文件夹下就生成了php.exe文件,环境变量中加入这个路径,好在命令行中能使用php命令。

开发PHP的第一个扩展

假如我们要开发一个widuu()函数,实现的效果如下

function widuu($string){

    return "your first extension {$string} is ok";

}

进入扩展目录,生成扩展文件夹

cd C:\php-sdk\phpdev\vc11\x86\php-5.5.20\ext

#输入php ext_skel_win32.php --extname=扩展名称

php ext_skel_win32.php --extname=widuuweb

这时候我们在C:\php-sdk\phpdev\vc11\x86\php-5.5.20\ext就看到了自己的目录widuuweb,打开widuuweb\php_widuuweb.h,在
#PHP_MINFO_FUNCTION(widuuweb);下一行写入自己的函数,譬如我定义的是widuu()函数
PHP_FUNCTION(widuu);
打开php_widuuweb.c编写函数,在PHP_FUNCTION(confirm_widuuweb_compiled)下
PHP_FUNCTION(widuu){

    char *arg_string = NULL;

    int  arg_len,str_len;

    char *string;

    if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,"s",&arg_string,&arg_len) == FAILURE){

        return;

    }

    str_len = spprintf(&string,0,"your first extension %.78s is ok",arg_string);

    RETURN_STRINGL(string,str_len,0);

}

然后找到PHP_FE(confirm_widuuweb_compiled, NULL),在下边注册你的函数

const zend_function_entry widuuweb_functions[] = {

    PHP_FE(confirm_widuuweb_compiled,   NULL)       /* For testing, remove later. */

    PHP_FE(widuu,NULL)

    PHP_FE_END  /* Must be the last line in widuuweb_functions[] */

};

修改C:\php-sdk\phpdev\vc11\x86\php-5.5.20\ext\widuuweb\config.w32,去掉
// ARG_ENABLE("widuuweb", "enable widuuweb support", "no");
前边的注释,vs命令行,输入cd .. 到php-5.5.20目录中,输入下面的命令
buildconf --force
#查看扩展
configure --help
如果,有错误,大家可以打开,目录下configure.js查看,我这个出现了错误,是configure.js的4791行,
ARG_ENABLE("widuuweb", "enable widuuweb support", "no");  */
多了一个*/的注释,去掉就可以了,然后再输入
configure --help
就看到了,有一行
 --enable-widuuweb             enable widuuweb support
然后配置
configure --disable-all --enable-cli --enable-widuuweb=shared
php动态扩展

其中--enable-widuuweb=shared动态扩展,正好与静态扩展相对。
然后输入nmake,完成后,我们在C:\php-sdk\phpdev\vc11\x86\php-5.5.20\Release_TS目录下就发现了php_widuuweb.dll文件,可以放到环境中测试了。
如果你本地没有安装php环境,而是跟我一样只是编译了php,如果测试,我建议静态编译看效果
configure --disable-all --enable-cli --enable-widuuweb=static
nmake
然后,你可以再Release_TS目录下,输入
php -r "echo widuu('widuu');"  //输出"your first extension widuu is ok"
ok,就说到这里,以后再慢慢来讲,有什么不懂的大家可以留言,基础的ZEND_API,大家可以去walu.cc查看

PHP 相关文章推荐
全局记录程序片段的运行时间 正确找到程序逻辑耗时多的断点
Jan 06 PHP
php中DOMElement操作xml文档实例演示
Mar 26 PHP
PHP容易忘记的知识点分享
Apr 30 PHP
PHP实现使用优酷土豆视频地址获取swf播放器分享地址
Jun 05 PHP
PHP ajax 异步执行不等待执行结果的处理方法
May 27 PHP
PHP编译安装时常见错误解决办法
May 28 PHP
jquery获取多个checkbox的值异步提交给php的方法
Jun 24 PHP
PHP+Mysql基于事务处理实现转账功能的方法
Jul 08 PHP
php中namespace use用法实例分析
Jan 22 PHP
CodeIgniter 完美解决URL含有中文字符串
May 13 PHP
Yii2.0中的COOKIE和SESSION用法
Aug 12 PHP
基于php中echo用逗号和用点号的区别详解
Jan 23 PHP
PHP中require和include路径问题详解
Dec 25 #PHP
Yii框架调试心得--在页面输出执行sql语句
Dec 25 #PHP
Web程序工作原理详解
Dec 25 #PHP
php更新mysql后获取改变行数的方法
Dec 25 #PHP
php常见的魔术方法详解
Dec 25 #PHP
php利用scws实现mysql全文搜索功能的方法
Dec 25 #PHP
php中heredoc与nowdoc介绍
Dec 25 #PHP
You might like
php实现的简单压缩英文字符串的代码
2008/04/24 PHP
c#中的实现php中的preg_replace
2009/12/21 PHP
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装(win+linux)
2012/05/05 PHP
改写函数实现PHP二维/三维数组转字符串
2013/09/13 PHP
国产PHP开发框架myqee新手快速入门教程
2014/07/14 PHP
Codeigniter实现发送带附件的邮件
2015/03/19 PHP
浅谈php的优缺点
2015/07/14 PHP
php微信公众平台开发(四)回复功能开发
2016/12/06 PHP
Laravel框架实现抢红包功能示例
2019/10/31 PHP
js实现俄罗斯方块小游戏分享
2014/01/31 Javascript
jquery中获得元素尺寸和坐标的方法整理
2014/05/18 Javascript
jquery手风琴特效插件
2015/02/04 Javascript
对js中回调函数的一些看法
2016/08/29 Javascript
jqueryUI tab标签页代码分享
2017/10/09 jQuery
详解Angular如何正确的操作DOM
2018/07/06 Javascript
vue-cli3环境变量与分环境打包的方法示例
2019/02/18 Javascript
详解React项目中碰到的IE问题
2019/03/14 Javascript
微信小程序如何获取地址
2019/12/24 Javascript
React+EggJs实现断点续传的示例代码
2020/07/07 Javascript
使用vue引入maptalks地图及聚合效果的实现
2020/08/10 Javascript
python opencv之分水岭算法示例
2018/02/24 Python
flask 实现上传图片并缩放作为头像的例子
2020/01/09 Python
利用 PyCharm 实现本地代码和远端的实时同步功能
2020/03/23 Python
python调用win32接口进行截图的示例
2020/11/11 Python
详解css3 mask遮罩实现一些特效
2018/10/24 HTML / CSS
匡威帆布鞋美国官网:Converse美国
2016/08/22 全球购物
杰夫·班克斯男士服装网上商店:Jeff Banks
2019/10/24 全球购物
医学生实习自荐信
2013/10/01 职场文书
英语专业学子个人的自我评价
2013/10/02 职场文书
民族学专业职业生涯规划范文:积跬步以至千里
2014/09/11 职场文书
小学生差生评语
2014/12/29 职场文书
2015年关爱留守儿童工作总结
2015/05/22 职场文书
原生JS中应该禁止出现的写法
2021/05/05 Javascript
Java GUI编程菜单组件实例详解
2022/04/07 Java/Android
python的html标准库
2022/04/29 Python
java版 联机五子棋游戏
2022/05/04 Java/Android