软件工程
当前位置 :首页信息技术软件工程

windows下PHP扩展开发全过程(无需Cygwin)

来源: 作者: 时间:2011-10-07 点击:

准备工作:
1、安装PHPnow(参考网站phpnow.org),然后安装Visual C++ 2008(可通过360软件管家直接安装)
2、下载php源码包并解压到e:php(因为这里PHPnow中的php版本为5.2.14所以源码包也下载该版本的)
3、进入e:phpext目录,复制skeleton文件夹,并重命名为要开发扩展的名字,本例为“myext”
4、把二进制包中dev目录(PHPnow中的php-5.2.14-Win32文件夹下)下的php5ts.lib文件,拷入新建的myext目录
5、编辑myext目录中的php_skeleton.h、skeleton.c、skeleton.dsp这三个文件,将文件名中的skeleton替换为myext,文件内容中的所有extname替换为myext,EXTNAME替换为MYEXT。(注意严格区分大小写)

编写代码:
6、编辑php_myext.h文件(头文件)
在PHP_FUNCTION(confirm_myext_compiled);下面编写
PHP_FUNCTION(hello);
声明一个hello函数
7、编辑myext.c文件(主文件)
在PHP_FE(confirm_myext_compiled,        NULL) 下面编写
PHP_FE(hello,        NULL)
这是函数入口,下面该写函数主体了
找到PHP_FUNCTION(confirm_test_compiled)函数,该函数是测试函数,在该函数后面新写一个函数

PHP_FUNCTION(hello)
{
        char *arg = NULL;
        int arg_len, len;
        char *strg;

    /* 接收参数 */
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {
                return;
        }

        len = spprintf(&strg, 0, "Hello,%s", arg);
    RETURN_STRINGL(strg, len, 0);
}

编译代码:
8、进入e:phpextmyext目录,用Visual C++ 2008打开文件myext.dsp,这时默认的编译会是Debug_TS模式,我们要改为Release_TS模式
9、然后在Visual C++ 2008左侧右键选择该项目myext,然后点击“生成”或“重新生成”
10、如果没有错误,则会在e:php目录下会生成一个Release_TS文件夹(注意不是e:phpextmyext下的Release_TS),里面就是编译好的php_myext.dll扩展
注意:如果编译时出现“不能分配常量大小为 0 的数组”错误,以下是解决办法 :
修改e:phpmainconfig.w32.h文件,把其中"#define _USE_32BIT_TIME_T 1"这一行注释掉就可以了

测试使用:
11、将php_myext.dll文件拷入运行环境中的php扩展目录ext
12、编辑php.ini添加extension=php_myext.dll,重启apache
13、在php文件中执行如下语句
echo hello('World');
将输出
Hello,World
14、通过echo phpinfo();也可看到扩展已加载的信息。
myext support              enabled

上一篇:
下一篇: 已经是最后一篇
最新评论共有 位网友发表了评论
发表评论
用户名: 密码: 游客发言不需要密码