凌的博客

您现在的位置是: 首页 > 学无止境 > PHP > 

PHP

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

2016-09-06 PHP 654
转自http://www.cnblogs.com/myths/archive/2011/11/28/2266593.html 以前写过一次PHP扩展DLL,那个是利用调用系统的COM口实现的扩展,与PHP不能真正融合。心血来潮,研究了一下PHP的源码,网上找了一些资料,

转自http://www.cnblogs.com/myths/archive/2011/11/28/2266593.html

以前写过一次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, "",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,在网站目录下新建一文件,输入以下内容:

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

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

添加扩展:

php代码:

最终效果:

phpinfo中的扩展信息:

文章评论

0条评论