windows下开发PHP扩展dll(无需Cygwin)

windows下开发php扩展网上很多资料都说需要Cygwin,其实完全可以不必安装该东东。没错,是可以在linux下生成骨架后拷到windos下来用,但是,如果没有linux环境呢?什么,装虚拟机?我晕,你咋又绕回去了- -! 除了编译外,shell环境主要就是为了生成扩展的骨架,其实骨架已经在php源码包中了了,我们只需要把相关名字替换一下即可使用。
 
准备:
 
1、php源码包和windows下的二进制包,以及安装Visual C++,并把Microsoft Visual Studio\Common\MSDev98\Bin的绝对路径添加到windows环境变量
 
2、解压源码包到d:\php_src
 
3、进入d:\php_src\ext目录,复制skeleton文件夹,并重命名为要开发扩展的名字,本例为“linvo”
 
4、把二进制包中dev目录下的php5ts.lib文件,拷入新建的linvo目录
 
5、编辑linvo目录中的php_skeleton.h、skeleton.c、skeleton.dsp这三个文件,替换内容中所有extname为linvo,EXTNAME为LINVO。(严格区分大小写)
 
编码:
 
6、编辑php_skeleton.h文件(头文件)
 
在PHP_FUNCTION(confirm_linvo_compiled);下面编写
 
PHP_FUNCTION(hello);
 
声明一个hello函数
 
7、编辑skeleton.c文件(主文件)
 
在PHP_FE(confirm_linvo_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、运行cmd命令行,进入d:\php_src\ext\linvo目录
 
9、输入 msdev linvo.dsp /MAKE "linvo - Win32 Release_TS"
 
10、如果没有错误,则在php_src目录下会生成一个Release_TS文件夹,里面就是编译好的php_linvo.dll扩展
 
使用:
 
11、将其拷入运行环境中的php扩展目录ext
 
12、编辑php.ini添加extension=php_linvo.dll,重启apache
 
13、在php文件中执行如下语句
 
echo hello('Linvo');
 
将输出
 
Hello,Linvo
 
14、通过echo phpinfo();也可看到扩展已加载的信息
posted @ 2017-08-16 09:16  h2z  阅读(959)  评论(0编辑  收藏  举报