+ -
当前位置:首页 → 问答吧 → windows下开发PHP扩展(无需Cygwin)

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

时间:2009-04-17

来源:互联网

本帖最后由 linvo 于 2009-4-17 13:28 编辑

声明:新手入门,高手飘过(指点一二更好^^)~

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)函数,该函数是测试函数,在该函数后面新写一个函数
[code]
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);
}
[/code]
编译:
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();也可看到扩展已加载的信息
下载 (5.21 KB)
2009-4-17 13:27

作者: linvo   发布时间: 2009-04-17

好像只能生成*.lib 文件啊

是不是要重新做一个dll 文件来把它引入???

作者: chnzbq   发布时间: 2009-04-18

我知道dll放在哪里了...

作者: chnzbq   发布时间: 2009-04-18

关注的是zend api!!!还有这样教程网上都很多!

作者: liexusong   发布时间: 2009-04-18

关注的是zend api!!!还有这样教程网上都很多!
liexusong 发表于 2009-4-18 14:43
我已经说的很明白了:
1、声明:新手入门,高手飘过(指点一二更好^^)~
2、windows下开发php扩展网上很多资料都说需要Cygwin

作者: linvo   发布时间: 2009-04-18

我知道dll放在哪里了...
chnzbq 发表于 2009-4-18 14:20
恭喜:)

作者: linvo   发布时间: 2009-04-18

过来看看,,我想知道写扩展有啥好处,,,是不是能写就很厉害?

作者: lxylxy888666   发布时间: 2009-04-20

过来看看,,我想知道写扩展有啥好处,,,是不是能写就很厉害?
lxylxy888666 发表于 2009-4-20 09:56
我不知道你的反问句有何用意。
好处很多,也很明显
1、限于PHP语言本身的抽象程度,它不能直接访问某些库或特定于操作系统的调用。
2、你有一些现成的PHP代码,但是你知道它可以(运行)更快、(占用空间)更小,而且消耗更少的内存。
这两点足矣

作者: linvo   发布时间: 2009-04-20

新手入门。。。比较好的。。。谢谢

作者: fu1616   发布时间: 2009-04-20

这样能不能直接把PHP的code封装到dll里?把自定义函数封装进去呢?

作者: XLEdoo   发布时间: 2009-04-28

这样能不能直接把PHP的code封装到dll里?把自定义函数封装进去呢?
XLEdoo 发表于 2009-4-28 19:51
当然可以
但是要把程序逻辑由php代码改成c语言来实现:)

作者: linvo   发布时间: 2009-04-29

好东西!
我要学习一下!

作者: aries   发布时间: 2009-04-30

当然可以
但是要把程序逻辑由php代码改成c语言来实现:)
linvo 发表于 2009-4-29 16:34
这样的话就相当于用C来写PHP了,哈,如果是商业程序的话封装成DLL就不容易被破解了!

作者: XLEdoo   发布时间: 2009-05-02

这样的话就相当于用C来写PHP了,哈,如果是商业程序的话封装成DLL就不容易被破解了!
XLEdoo 发表于 2009-5-2 13:55
这也是其中的一个用途~

作者: linvo   发布时间: 2009-05-04

一直感觉用C写扩展超级麻烦,没VB来的快`在WIN下VB比C牛X多了`不信?试试看。。
补充一下`新手最好先不要学这个。基础才是王道

作者: 哈出出   发布时间: 2009-05-04

一直感觉用C写扩展超级麻烦,没VB来的快`在WIN下VB比C牛X多了`不信?试试看。。
补充一下`新手最好先不要学这个。基础才是王道
哈出出 发表于 2009-5-4 10:07
C麻烦是肯定的
但是,跑php的服务器有几个是win的呢?

作者: linvo   发布时间: 2009-05-05