当前位置:编程学习 > php >>

使用C语言来扩展PHP,写PHP扩展dll

 

 以前写过一次PHP扩展DLL,那个是利用调用系统的COM口实现的扩展,与PHP不能真正融合。心血来潮,研究了一下PHP的源码,网上找了一些资料,自己尝试写了一个扩展DLL,测试没问题。下面记录一下具体扩展方法:

  1、首先从www.php.net网站上下载php源码,此处以php-5.2.17版本为例,下载后解压至E:盘根目录下(目录可以自己随意定)。

  2、下载安装VC++ 6.0,因为PHP源码是利用6.0版本写的,所以使用这个版本编译不会出现意外,别的版本未测试。

  3、把VC++ 6.0安装目录中的 Microsoft Visual Studio\Common\MSDev98\Bin 绝对路径添加到系统环境变量中。

  4、进入E:\php-5.2.17\ext目录,复制skeleton文件夹,并重命名为要开发扩展的名字,本例为“myfun”。

  5、重命名skeleton.c为myfun.c,skeleton.dsp为myfun.dsp

  6、编辑myfun目录中的php_skeleton.h、myfun.c、myfun.dsp这三个文件,替换内容中所有extname为myfun,EXTNAME为MYFUN。(一定要严格区分大小写)

  下面就进入到编码阶段:

  7、打开php_skeleton.h文件(头文件),找到PHP_FUNCTION(confirm_myfun_compiled);,在PHP_FUNCTION(confirm_myfun_compiled);,下面编写PHP_FUNCTION(mb_MessageBox);,声明一个mb_MessageBox函数,此函数的作用仅是输出js弹出一个alert消息框,用于测试。

  8、下面定义函数入口,打开myfun.c文件,找到PHP_FE(confirm_myfun_compiled,NULL) ;,在下面编写 PHP_FE(mb_MessageBox,NULL),此处注意一下,PHP_FE是定义的一个宏,所以后面不用加引号。

  9、在myfun.c最后面编写函数的实体部分:

	

PHP_FUNCTION(mb_MessageBox)

{

    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, "<script>alert('%s')</script>",arg); //此处正是输入的js代码

    RETURN_STRINGL(strg, len, 0);

}

  到这代码书写就完成了,下面开始编译:

 

  10、开始->运行,输入CMD,打开命令行窗口。

 

  11、进入myfun的目录,输入msdev myfun.dsp /MAKE "myfun - Win32 Release_TS",回车编译。

 

  12、如果没有错误,在E:\php-5.2.17下会生成一个Release_TS文件夹,在里面就可以找到php_myfun.dll文件。

 

  至此扩展dll开发完成,下面在php中进行测试:

 

  13、把php_myfun.dll复制到原php目录中的ext文件夹内。

 

  14、打开php.ini文件,添加当前dll的扩展extension=php_myfun.dll

 

  15、重启IIS或apache,在网站目录下新建一文件,输入以下内容:

 

<?php

echo mb_MessageBox("测试PHP扩展DLL by 马犇");

?>

	

  浏览即可看到效果,下面附图四张:

  添加扩展:

\

  php代码:

\

  最终效果:

\

  phpinfo中的扩展信息:

  

\

 

  至此,php扩展开发已经完成

 

作者 马犇

补充:Web开发 , php ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,