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开发文件系统实例讲解
Oct 09 PHP
基于PHP字符串的比较函数strcmp()与strcasecmp()的使用详解
May 15 PHP
解析PHP中intval()等int转换时的意外异常情况
Jun 21 PHP
浅谈PHP变量作用域以及地址引用问题
Dec 27 PHP
php多重接口的实现方法
Jun 20 PHP
php 实现进制相互转换
Apr 07 PHP
CI框架AR数据库操作常用函数总结
Nov 21 PHP
给大家分享几个常用的PHP函数
Jan 15 PHP
Yii2 批量插入、更新数据实例
Mar 15 PHP
PHP的简单跳转提示的实现详解
Mar 14 PHP
laravel实现Auth认证,登录、注册后的页面回跳方法
Sep 30 PHP
PHP 命名空间和自动加载原理与用法实例分析
Apr 29 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
索尼ICF-SW100收音机评测
2021/03/02 无线电
php中用socket模拟http中post或者get提交数据的示例代码
2013/08/08 PHP
Laravel配置全局公共函数的方法步骤
2019/05/09 PHP
IE与FireFox的兼容性问题分析
2007/04/22 Javascript
基于jquery的滚动新闻列表
2010/06/19 Javascript
javascript中字符串拼接需注意的问题
2010/07/13 Javascript
js实现简洁的滑动门菜单(选项卡)效果代码
2015/09/04 Javascript
JavaScript原生xmlHttp与jquery的ajax方法json数据格式实例
2015/12/04 Javascript
浅谈JavaScript前端开发的MVC结构与MVVM结构
2016/06/03 Javascript
jQuery实现调整表格单列顺序完整实例
2016/06/20 Javascript
在js中实现邮箱格式的验证方法(推荐)
2016/10/24 Javascript
javascript中活灵活现的Array对象详解
2016/11/30 Javascript
React简单介绍
2017/05/24 Javascript
ElementUI多个子组件表单的校验管理实现
2019/11/07 Javascript
[01:51]2014DOTA2国际邀请赛 这个赛场没有失败者VGTi5再见
2014/07/23 DOTA
python笔记(2)
2012/10/24 Python
python负载均衡的简单实现方法
2018/02/04 Python
详解Python中的分组函数groupby和itertools)
2018/07/11 Python
Tensorflow 实现释放内存
2020/02/03 Python
Python安装第三方库攻略(pip和Anaconda)
2020/10/15 Python
pycharm 2020.2.4 pip install Flask 报错 Error:Non-zero exit code的问题
2020/12/04 Python
CSS3 Backgrounds属性相关介绍
2011/05/11 HTML / CSS
CSS+jQuery+PHP+MySQL实现的在线答题功能
2015/04/25 HTML / CSS
详解CSS3中字体平滑处理和抗锯齿渲染
2017/03/29 HTML / CSS
使用Canvas操作像素的方法
2018/06/14 HTML / CSS
英国女性时尚精品店:THE DRESSING ROOM
2018/05/23 全球购物
数据库方面面试题
2012/04/22 面试题
电信专业应届生自荐信
2013/09/28 职场文书
工程力学专业毕业生求职信
2013/10/06 职场文书
活动总结怎么写
2014/04/28 职场文书
优秀班主任经验交流材料
2014/06/02 职场文书
艺术学院毕业生自荐信
2014/07/05 职场文书
初中中等生评语
2014/12/29 职场文书
护士自荐信怎么写
2015/03/06 职场文书
mysql如何配置白名单访问
2021/06/30 MySQL
win10系统xps文件怎么打开?win10打开xps文件的两种操作方法
2022/07/23 数码科技