打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

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

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

转自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, "<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中的扩展信息:

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
windows下开发PHP扩展dll[转]
利用C 制作dll并调用dll
include,include
PHP安装pthreads多线程扩展教程[windows篇]
Windows以函数的形式为应用提供了各种功能 这些形式的函数称(MessageBox()提供了显示消息框的功能它并不是C语言的标准函数API的目标文件存储在名为DLL文件的特殊库文件中)
折腾中控指纹签到SDK始末(.net监听) | quericy Eden*
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服