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过滤危险html代码的函数
Jul 22 PHP
php session应用实例 登录验证
Mar 16 PHP
php mssql 分页SQL语句优化 持续影响
Apr 26 PHP
php文章内容分页并生成相应的htm静态页面代码
Jun 07 PHP
适用于php-5.2 的 php.ini 中文版[金步国翻译]
Apr 17 PHP
克隆一个新项目的快捷方式
Apr 10 PHP
PHP Class&Object -- PHP 自排序二叉树的深入解析
Jun 25 PHP
php实现的简单检验登陆类
Jun 18 PHP
PHP中的类型提示(type hinting)功能介绍
Jul 01 PHP
php模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(中)
Jun 11 PHP
php通过pecl方式安装扩展的实例讲解
Feb 02 PHP
PHP vsprintf()函数格式化字符串操作原理解析
Jul 14 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
yii2 modal弹窗之ActiveForm ajax表单异步验证
2016/06/13 PHP
Apache PHP MySql安装配置图文教程
2016/08/27 PHP
php生出随机字符串
2017/07/06 PHP
PHP实现微信商户支付企业付款到零钱功能
2018/09/30 PHP
laravel5.6 框架邮件队列database驱动简单demo示例
2020/01/26 PHP
取得窗口大小 兼容所有浏览器的js代码
2011/08/09 Javascript
brook javascript框架介绍
2011/10/10 Javascript
IE与FireFox中的childNodes区别
2011/10/20 Javascript
jQuery$命名冲突怎么办如何解决
2014/01/16 Javascript
JavaScript对象数组的排序处理方法
2015/10/21 Javascript
javascript常用函数(1)
2015/11/04 Javascript
vue父子组件的数据传递示例
2017/03/07 Javascript
深入解析js轮播插件核心代码的实现过程
2017/04/14 Javascript
在JS中如何把毫秒转换成规定的日期时间格式实例
2017/05/11 Javascript
angular1.x ui-route传参的三种写法小结
2018/08/31 Javascript
mpvue项目中使用第三方UI组件库的方法
2018/09/30 Javascript
react配置antd按需加载的使用
2019/02/11 Javascript
微信小程序实现同一页面取值的方法分析
2019/04/30 Javascript
JavaScript定时器常见用法实例分析
2019/11/15 Javascript
jquery实现直播弹幕效果
2019/11/28 jQuery
vue双击事件2.0事件监听(点击-双击-鼠标事件)和事件修饰符操作
2020/07/27 Javascript
[03:48]DOTA2完美大师赛主赛事第二日精彩集锦
2017/11/24 DOTA
为Python程序添加图形化界面的教程
2015/04/29 Python
TensorFlow高效读取数据的方法示例
2018/02/06 Python
基于Python 装饰器装饰类中的方法实例
2018/04/21 Python
python3实现SMTP发送邮件详细教程
2018/06/19 Python
基于python绘制科赫雪花
2018/06/22 Python
pyinstaller还原python代码过程图解
2020/01/08 Python
python画图常规设置方式
2020/03/05 Python
快速实现一个简单的canvas迷宫游戏的示例
2018/07/04 HTML / CSS
运动会广播稿20字
2014/02/18 职场文书
大学生标准自荐书
2014/06/15 职场文书
温馨提示标语
2014/06/26 职场文书
房屋租赁委托书范本
2014/10/04 职场文书
《秋天的图画》教学反思
2016/02/19 职场文书
mysql脏页是什么
2021/07/26 MySQL