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 相关文章推荐
利用文件属性结合Session实现在线人数统计
Oct 09 PHP
PHP新手上路(十)
Oct 09 PHP
解决163/sohu/sina不能够收到PHP MAIL函数发出邮件的问题
Mar 13 PHP
PHP Session_Regenerate_ID函数双释放内存破坏漏洞
Jan 27 PHP
php自动获取字符串编码函数mb_detect_encoding
May 31 PHP
php eval函数用法 PHP中eval()函数小技巧
Oct 31 PHP
php生成验证码函数
Oct 20 PHP
PHP图片加水印实现方法
May 06 PHP
PHP编程计算文件或数组中单词出现频率的方法
May 22 PHP
YII框架中使用memcache的方法详解
Aug 02 PHP
php中通用的excel导出方法实例
Dec 30 PHP
PHPStudy下如何为Apache安装SSL证书的方法步骤
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/06/28 PHP
Look And Say 序列php实现代码
2011/05/22 PHP
ThinkPHP实现事务回滚示例代码
2014/06/23 PHP
C# WinForm中实现快捷键自定义设置实例
2015/01/23 PHP
php实现encode64编码类实例
2015/03/24 PHP
PHP实现JS中escape与unescape的方法
2016/07/11 PHP
php+ajax实现异步上传文件或图片功能
2017/07/18 PHP
javascript showModalDialog 内跳转页面的问题
2010/11/25 Javascript
详解JavaScript中localStorage使用要点
2016/01/13 Javascript
canvas快速绘制圆形、三角形、矩形、多边形方法介绍
2016/12/29 Javascript
jquery.zclip轻量级复制失效问题
2017/01/08 Javascript
Vue+SpringBoot开发V部落博客管理平台
2017/12/27 Javascript
vue 项目打包通过命令修改 vue-router 模式 修改 API 接口前缀
2018/06/13 Javascript
vue监听用户输入和点击功能
2019/09/27 Javascript
vue浏览器返回监听的具体步骤
2021/02/03 Vue.js
Windows和Linux下使用Python访问SqlServer的方法介绍
2015/03/10 Python
python机器学习实战之K均值聚类
2017/12/20 Python
Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
2018/04/17 Python
Python脚本按照当前日期创建多级目录
2019/03/01 Python
python3 pygame实现接小球游戏
2019/05/14 Python
python通过robert、sobel、Laplace算子实现图像边缘提取详解
2019/08/21 Python
关于Python中的向量相加和numpy中的向量相加效率对比
2019/08/26 Python
PyCharm永久激活方式(推荐)
2020/09/22 Python
python 实现 hive中类似 lateral view explode的功能示例
2020/05/18 Python
英国异国风情旅游网站:Travel Talk Tours(团体旅游、探险旅游、帆船假期)
2018/07/26 全球购物
《藤野先生》教学反思
2014/02/19 职场文书
技能竞赛活动方案
2014/02/21 职场文书
2014迎新年晚会策划方案
2014/02/23 职场文书
大学专科求职信
2014/07/02 职场文书
2014年房地产工作总结范文
2014/11/19 职场文书
2015年车间安全管理工作总结
2015/05/13 职场文书
开学第一天的感想
2015/08/10 职场文书
分析JVM源码之Thread.interrupt系统级别线程打断
2021/06/29 Java/Android
Python制作一个随机抽奖小工具的实现
2021/07/07 Python
node.js使用express-fileupload中间件实现文件上传
2021/07/16 Javascript
js前端设计模式优化50%表单校验代码示例
2022/06/21 Javascript