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 相关文章推荐
用PHP制作的意见反馈表源码
Mar 11 PHP
需要注意的几个PHP漏洞小结
Feb 05 PHP
PHP中全局变量global和$GLOBALS[]的区别分析
Aug 06 PHP
浅谈PHP强制类型转换,慎用!
Jun 06 PHP
解析PHP强制转换类型及远程管理插件的安全隐患
Jun 30 PHP
PHP JSON出错:Cannot use object of type stdClass as array解决方法
Aug 16 PHP
mysql_connect localhost和127.0.0.1的区别(网络层阐述)
Mar 26 PHP
php实现屏蔽掉黑帽SEO的搜索关键字
Apr 15 PHP
php筛选不存在的图片资源
Apr 28 PHP
实现PHP搜索加分页
Oct 12 PHP
PHP 进度条函数的简单实例
Sep 19 PHP
Laravel框架FormRequest中重写错误处理的方法
Feb 18 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生成缩略图示例代码分享(使用gd库实现)
2014/01/20 PHP
免费手机号码归属地API查询接口和PHP使用实例分享
2014/04/10 PHP
HTML页面如何象ASP一样接受参数
2007/02/07 Javascript
javascript new fun的执行过程
2010/08/05 Javascript
php 中序列化和json使用介绍
2013/07/08 Javascript
JS 屏蔽键盘不可用与鼠标右键不可用的方法
2013/11/18 Javascript
Jqgrid设置全选(选择)及获取选择行的值示例代码
2013/12/28 Javascript
Node.js巧妙实现Web应用代码热更新
2015/10/22 Javascript
详解Angular 开发环境搭建
2017/06/22 Javascript
ES6 系列之 WeakMap的使用示例
2018/08/06 Javascript
浅谈微信小程序flex布局基础
2018/09/10 Javascript
JavaScript 链表定义与使用方法示例
2020/04/28 Javascript
js canvas实现五子棋小游戏
2021/01/22 Javascript
[01:44]Ti10举办地公布
2019/08/25 DOTA
python实现DES加密解密方法实例详解
2015/06/30 Python
Python使用arrow库优雅地处理时间数据详解
2017/10/10 Python
使用python对文件中的数值进行累加的实例
2018/11/28 Python
Python实现使用request模块下载图片demo示例
2019/05/24 Python
django-初始配置(纯手写)详解
2019/07/30 Python
Python django搭建layui提交表单,表格,图标的实例
2019/11/18 Python
关于Pytorch的MNIST数据集的预处理详解
2020/01/10 Python
使用python求解二次规划的问题
2020/02/29 Python
Python如何批量生成和调用变量
2020/11/21 Python
python 实现图片裁剪小工具
2021/02/02 Python
HTML5之SVG 2D入门7—SVG元素的重用与引用
2013/01/30 HTML / CSS
整理HTML5移动端开发的常用触摸事件
2016/04/15 HTML / CSS
HTML5中的Web Notification桌面通知功能的实现方法
2019/07/29 HTML / CSS
Bogner美国官网:滑雪服中的”Dior”
2018/01/30 全球购物
世界上最大的铁人三项商店:Tri UK
2020/11/04 全球购物
技术经理的自我评价范文
2013/12/03 职场文书
销售行政专员职责
2014/01/03 职场文书
大学生作弊检讨书
2014/02/19 职场文书
小孩不笨观后感
2015/06/03 职场文书
教育教学读书笔记
2015/07/02 职场文书
深入理解mysql事务隔离级别和存储引擎
2022/04/12 MySQL
MySQL普通表如何转换成分区表
2022/05/30 MySQL