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 disk_free_space 返回目录可用空间
May 10 PHP
php设计模式 Prototype (原型模式)代码
Jun 26 PHP
PHP类的静态(static)方法和静态(static)变量使用介绍
Feb 19 PHP
php基础教程 php内置函数实例教程
Aug 21 PHP
APACHE的AcceptPathInfo指令使用介绍
Jan 18 PHP
php+mysql实现用户注册登陆的方法
Jan 03 PHP
PHP微信刮刮卡 附微信接口
Jul 22 PHP
PHP图片添加水印功能示例小结
Oct 03 PHP
phpmyadmin下载、安装、配置教程
May 16 PHP
php双层循环(九九乘法表)
Oct 23 PHP
PHP面向对象程序设计之构造方法和析构方法详解
Jun 13 PHP
Thinkphp集成抖音SDK的实现方法
Apr 28 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
ThinkPHP下表单令牌错误与解决方法分析
2017/05/20 PHP
网站被恶意镜像怎么办 php一段代码轻松搞定(全面版)
2018/10/23 PHP
两种WEB下的模态对话框 (asp.net或js的分别实现)
2009/12/02 Javascript
jQuery效果 slideToggle() 方法(在隐藏和显示之间切换)
2011/06/28 Javascript
一个背景云变换js特效 鼠标移动背景云变化
2012/12/28 Javascript
JQuery入门—编写一个简单的JQuery应用案例
2013/01/03 Javascript
jquery查找tr td 示例模拟
2014/05/08 Javascript
js实现跨域的多种方法
2015/12/25 Javascript
理解JS事件循环
2016/01/07 Javascript
angularjs自定义ng-model标签的属性
2016/01/21 Javascript
jquery ztree实现树的搜索功能
2016/02/25 Javascript
基于Jquery和html5实现炫酷的3D焦点图动画
2016/03/02 Javascript
jQuery版AJAX简易封装代码
2016/09/14 Javascript
微信小程序 简单DEMO布局,逻辑,样式的练习
2016/11/30 Javascript
JSON与JS对象的区别与对比
2017/03/01 Javascript
获取当前按钮或者html的ID名称实例(推荐)
2017/06/23 Javascript
vuejs实现折叠面板展开收缩动画效果
2018/09/06 Javascript
JavaScript时间与时间戳的转换操作实例分析
2018/12/07 Javascript
Vue组件间通信方法总结(父子组件、兄弟组件及祖先后代组件间)
2019/04/17 Javascript
vue 对axios get pust put delete封装的实例代码
2020/01/05 Javascript
基于jquery实现彩色投票进度条代码解析
2020/08/26 jQuery
Python实现SMTP发送邮件详细教程
2021/03/02 Python
python实现稀疏矩阵示例代码
2017/06/09 Python
Python遍历某目录下的所有文件夹与文件路径
2018/03/15 Python
Python带动态参数功能的sqlite工具类
2018/05/26 Python
解决python 无法加载downsample模型的问题
2018/10/25 Python
django rest framework 实现用户登录认证详解
2019/07/29 Python
详解Django中views数据查询使用locals()函数进行优化
2020/08/24 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
2020/12/27 Python
移动HTML5前端框架—MUI的使用
2017/12/18 HTML / CSS
波兰最大的儿童服装连锁店之一:5.10.15.
2018/02/11 全球购物
房务中心文员岗位职责
2014/04/16 职场文书
人力资源管理专业求职信
2014/07/23 职场文书
2014年节能减排工作总结
2014/12/06 职场文书
2015年控辍保学工作总结
2015/05/18 职场文书
七年级作文之下雨天
2019/12/23 职场文书