使用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扩展开发已经完成
作者 马犇
最近更新
随机推荐
- 研究表明:旧硬盘可能泄露企业机密资料
- 和故宫携手发现“中纹之美”,WPS给互
- 传微信5.0或涉嫌违规遭苹果拒绝上架
- 信息爆炸时代如何考证新闻事实?看看
- DirectShow漏洞安全将大面积爆发(图)
- 爆炸新闻:sohu存在严重漏洞!
- 美宇航局证实病毒进入国际空间站 可记
- 甲骨文发补丁修复安全漏洞 含多款产品
- 百度回应反盗版联盟起诉:四大举措打
- 黑客战术:没有硝烟的战争—社会工程学
- 苹果MobileMe用户遭遇钓鱼邮件攻击
- 银行系电商加速布局 缺席“双11”很落
- 阿里通信17日开放入网 话费7折顺丰免
- 看起来很美的自媒体平台会败于何处
- P2P征信,或许是一门大生意
- 百万美元网络遭入侵 旧金山网络命脉被
- Vim Shell命令受恶意文件影响存在注入
- Linux Kernel e1000e驱动巨型帧处理绕
- 百万美元网站遭黑 俄罗斯黑客索财未果
- MS06-046:HTML 帮助中可能允许远程执