使用phpsdk做php5.5的扩展DLL插件开发

 好吧为了分词跟多一些 标题写的有些乱,大家能进来就行。

之前写过一篇5.4的 php扩展开发的教程,最近要搞就再写个5.5的环境搭建教程。

教程我尽量节省时间和步骤。

1.准备工具

windows 7 专业版

Visual Studio 2010 版本

msysgit (https://git-for-windows.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.38 (http://php.net/downloads.php下载,这个版本不定自己选择)

UnxUtils  http://sourceforge.net/projects/unxutils/下载一个UnxUtils.zip,flex.exe和bison.exe只是其中的两个

2.解压各个安装包

msysgit  运行安装 全部默认就好。

找个磁盘新建个目录,比如我的 C:\phpsdk

php-sdk-binary-tools-20110915.zip 解压到 C:\phpsdk\ 下

cd C:\phpsdk
#设置环境变量
bin\phpsdk_setvars.bat
#创建常用的php-sdk目录

bin\phpsdk_buildtree.bat phpdev

复制 C:\phpsdk\phpdev\vc9 到 C:\phpsdk\phpdev\vc11

deps-5.5-vc11-x86.7z 解压到 C:\phpsdk\phpdev\vc11\x86\ 下

php-5.5.38.tar.gz 解压到 C:\phpsdk\phpdev\vc11\x86\ 下

UnxUtils 解压到 C:\phpsdk\UnxUtils 下

3.环境变量设置

右键我的电脑->属性->高级系统设置->-高级>环境变量->系统变量->PATH

编辑PATH变量,新增:;C:\phpsdk\phpdev\vc11\x86\php-5.5.38\Release_TS;C:\phpsdk\UnxUtils\bin;C:\phpsdk\UnxUtils\usr\local\wbin

4.安装部分 #开头为说明 

#进入php源目录文件夹
cd c:\phpsdk\phpdev\vc11\x86\php-5.5.38
buildconf
#查看带的扩展和编译命令 可跳过
configure –help

#configure 命令后面的参数都是两个- 编辑问题可能会变成一个 需要手动改一下

configure –disable-all –enable-cli
#编译PHP程序
nmake clean; nmake

编译成功后生成的文件在
C:\phpsdk\phpdev\vc11\x86\php-5.5.38\Release_TS

5.新建PHP扩展项目

启动 git bash,运行 开始菜单->所有程序->GIT->Git Bash
以此输出下方命令
cd C:/phpsdk/phpdev/vc11/x86/php-5.5.38/ext
#输入php ext_skel_win32.php –extname=扩展名称
php ext_skel_win32.php –extname=net526

这时候我们在C:\phpsdk\phpdev\vc11\x86\php-5.5.38\ext就看到了自己的目录net526,打开net526\php_net526.h,在

#PHP_MINFO_FUNCTION(net526);下一行写入自己的函数,譬如我定义的是test526()函数
PHP_FUNCTION(test526);
打开php_net526.c编写函数,在PHP_FUNCTION(confirm_net526_compiled)下

PHP_FUNCTION(test526){

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_net526_compiled, NULL),在下边注册你的函数

const zend_function_entry net526_functions[] = {
PHP_FE(confirm_net526_compiled, NULL) /* For testing, remove later. */
PHP_FE(test526,NULL)
PHP_FE_END /* Must be the last line in net526_functions[] */
};
修改C:\phpsdk\phpdev\vc11\x86\php-5.5.38\ext\net526\config.w32,去掉

// ARG_ENABLE("net526", "enable net526 support", "no");
前边的注释,vs命令行,输入cd .. 到php-5.5.38目录中,输入下面的命令

buildconf –force
#查看扩展
configure –help
如果,有错误,大家可以打开,目录下configure.js查看,我这个出现了错误,是configure.js的4791行,

ARG_ENABLE("net526", "enable net526 support", "no"); */
多了一个*/的注释,去掉就可以了,然后再输入

configure –help
就看到了,有一行

–enable-net526 enable net526 support
然后配置

configure –disable-all –enable-cli –enable-net526=shared
php动态扩展

其中–enable-net526=shared动态扩展,正好与静态扩展相对。

然后输入nmake,完成后,我们在C:\phpsdk\phpdev\vc11\x86\php-5.5.38\Release_TS目录下就发现了php_net526.dll文件,可以放到环境中测试了。

如果你本地没有安装php环境,而是跟我一样只是编译了php,如果测试,我建议静态编译看效果

configure –disable-all –enable-cli –enable-net526=static
nmake
然后,你可以再Release_TS目录下,输入

php -r "echo test526(‘test526’);" //输出"your first extension test526 is ok"
ok,就说到这里,以后再慢慢来讲,有什么不懂的大家可以留言,基础的ZEND_API,大家可以去walu.cc查看

发表评论

您的电子邮箱地址不会被公开。