windows 7 64位 开发 php5.6.28扩展

来源:互联网 发布:java计算到今天多少天 编辑:程序博客网 时间:2024/06/08 12:28

开发php扩展对于一个phper来说还是很令人兴奋的。终于我用了一天多的时间在网上各种查找资料,让我编译出了自己的php扩展,下面的教程也是对网上一些教程的修改以及自己碰到的一下问题

先介绍一下开发环境:

windows 7 64位系统 

已安装了 xampp【v3.2.2版本】(php开发的集成环境) 使用的php版本是 php 5.6.28 (我就想开发一个扩展直接在我的环境中使用,所以下面的开发过程会按照php5.6.28的版本来进行,至于不同的版本开发php所使用的编译环境是不一样的,这些可以自己再网上查到)

准备工作:

visual studio 2012 安装  下载地址链接:http://pan.baidu.com/s/1nvmfYpN 密码:vf00 ;

cgywin 的安装见  《如何在windows系统下安装swoole

php-sdk-binary-tools-20110915.zip  (http://windows.php.net/downloads/php-sdk/)

deps-5.6-vc11-x86.7z http://windows.php.net/downloads/php-sdk/   

php-5.6.28.tar.gz  (http://php.net/downloads.php)

将以上的所有需要的东西准备齐全,我们就开始开发php 5.6.28 的扩展啦!

1. 现在 D盘创建一个目录作为我们的工作空间 我的事 D:\php-sdk

2. 解压php-sdk-binary-tools的二进制包,D:\php-sdk文件夹中,现在的目录结构如下:

php扩展

3.安装好vs2012会得到如下工具:

4.使用 x86 命令提示工具执行如下命令(注意:这里我犯过一个错误,我电脑是64位系统所以就想当然的使用了 x64工具命令提示,当把编译查来的dll文件引入xampp集成环境中的php扩展中后,提示我不是有效的win32有效程序,然后我就使用的x86的当然deps也要相应的换成x86的,再重新编译一次就可以啦!!)

vc11开发php扩展

#进入目录cd D:\php-sdk#设置环境变量bin\phpsdk_setvars.bat#创建常用的php-sdk目录bin\phpsdk_buildtree.bat phpdev

这时会产生一个 phpdev文件夹,下面有三个文件夹(vc6/vc8/vc9)但是我们编辑php5.6扩展需要vc11,所有我们复制vc9并命名为vc11,并且将 php-sdk-binary-tools-20110915.zip 和 php-5.6.28.tar.gz 解压到该目录的x86目录下面,此时目录应为:

php扩展


编译安装php

执行以下命令


#进入php源目录文件夹cd d:\php-sdk\phpdev\vc11\x86\php-5.6.28buildconf#查看带的扩展和编译命令configure --help#编译configure --disable-all --enable-cli

之后你应该看到如下画面:

php编译


执行nmake然后一直等待就好啦!这个过程中会报出warning错误,我们可以不管它,执行完之后我们会发现在 

d:\php-sdk\phpdev\vc11\x86\php-5.6.28\Release_TS


文件夹下面发现 php.exe文件,这是php编译完成,可以将编译好的php.exe路径加入到系统变量中我们继续


开发php扩展

先打开 D:\php-sdk\phpdev\vc11\x86\php-5.6.28\ext\ext_skel_win32.php修改

//我的cygwin安装到了d盘,根据实际情况定$cygwin_path = 'd:\cygwin\bin';
然后执行命令


cd D:\php-sdk\phpdev\vc11\x86\php-5.6.28\ext#输入php ext_skel_win32.php --extname=扩展名称php ext_skel_win32.php --extname=widuuweb

ext

这时会在ext文件夹下面多出一个 widuuweb 文件夹

打开 widuuweb 文件夹

修改文件 php_widuuweb.h 添加代码如下

PHP_FUNCTION(widuu);
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,"the url is %.78s",arg_string);    RETURN_STRINGL(string,str_len,0);}
修改 widuuweb.c


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[] */};
修改 config.w32
 ARG_ENABLE("widuuweb", "enable widuuweb support", "no");
进入到php-5.6.28文件夹下,依次执行


buildconf --force#查看扩展configure --help
如果报错的话打开该目录下的 configure.js 文件找到报错的行数 去掉多余的 “ */ ” 就可以啦!


继续依次执行以下命令

configure --disable-all --enable-cli --enable-widuuweb=shared #不执行make clean 当将dll文件加载后会报错nmake clean
#依次执行
nmake

然后再 刚才的 Release_TS 会看到生成的 dll 文件 

dll扩展


然后将我们的dll文件放到php的扩展文件夹 ext 下面 并修改 php.ini 文件 添加 

extension=php_widuuweb.dll
然后重启服务器


我们写一个php文件来测试一下

<?phpecho widuu("www.ithome.ren");
结果顺利执行输出   
the url is www.ithome.ren