在xp环境下编译php的c扩展dll文件(完全步骤解析)

本文详细介绍了在Windows环境下使用PHP开发dll扩展的过程,包括搭建环境、编译步骤及测试验证,帮助开发者掌握从源码到实际应用的完整流程。

本文大部分参考:windows下开发PHP扩展dll(无需Cygwin)http://hi.baidu.com/30way/blog/item/1827418bf11cdecbfd1f109c.html,对其进行补充和修正;

工具目录:E:\源码包\XP下apache+php+dll编译\

包括php-5.2.17.tar.gz源码包和php-5.2.5-Win32.rar(XP下二进制包);

 

步骤:

1、搭建apache2+php5的windows环境,安装Visual C++6.0(把Microsoft Visual Studio\Common\MSDev98\Bin的绝对路径添加到windows环境变量,到最后,都没添加成功,而是直接在执行程序之前添加运行路径);

2、解压源码包到D:\php-5.2.17,二进制包解压到D:\PHP;

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

4、把二进制包中dev目录下的php5ts.lib文件,拷入新建的linvo目录(编译需要);

5、修改linvo目录中的php_skeleton.h、skeleton.c、skeleton.dsp这三个文件,把文件名都替换成相应的linvo,并且替换内容中所有extname为linvo,EXTNAME为LINVO(严格区分大小写);

6、编辑php_linvo.h文件(头文件)

在PHP_FUNCTION(confirm_linvo_compiled);下面编写

PHP_FUNCTION(hello);

声明一个hello函数;

7、编辑linvo.c文件(主文件)

在PHP_FE(confirm_linvo_compiled,        NULL) 下面编写

PHP_FE(hello,        NULL)

这是函数入口,下面该写函数主体了

找到PHP_FUNCTION(confirm_test_compiled)函数,该函数是测试函数,在该函数后面新写一个函数

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);

}

8、运行cmd命令行,进入d:\ php-5.2.17\ext\linvo目录,输入命令(如图1);

9、如果没有错误,则在php_src目录下会生成一个Release_TS文件夹,里面就是编译好的php_linvo.dll扩展;

10、将其拷入运行环境中的php扩展目录D:\PHP\ext;

11、编辑C:\WINDOWS\php.ini,添加extension=php_linvo.dll,重启apache;

12、D:\Program Files\Apache Group\Apache2\htdocs\下创建测试文件test.php,内容如下:

<?php

echo hello('Linvo');

?>

13、通过浏览器访问该文件:http://localhost/test.php,访问成功(如图2);

14、通过phpinfo()也可看到扩展已加载的信息:

<?

phpinfo();

?>

 

Windows7及vista系统可用,但需要去掉UAC,或者用管理员权限运行主程序。 如无意外,黑刀Dezender 5.0 三套解密内核版 将会是最终版本,除非新的解密内核出现,否则今后也将不再更新,也请勿再加本人QQ咨询任何关于Zend解密的问题!感谢各位黑刀爱好者关注,敬请期待本人其他作品。谢谢! 反馈问题情况汇总: 1、有很多朋友说下载了最新版还是解不出来,是因为他们把程序放在了桌面上或者Program Files目录下。大家一定要记得,不要把黑刀Dezender的主程序以及需要解密的PHP文件放置在目录名包含空格的目录内,比如桌面、Program Files目录等,除了目录名不能包含空格以外,也不能包含英文的句号,以免程序将目录当做文件来处理,造成无法解密的情况。还有一种可能性,是因为被加密了的PHP文件采用了最新版的Zend来进行的加密,所以黑刀Dezender解不出来。 2、解密出来的文件有“乱码”:这种情况通常是因为PHP程序在加密时采用了混淆函数,而所使用的函数又是Dezender无法识别的,所以在函数的部分变成了“乱码”。目前唯一的解决办法只能是更新自己的混淆函数库来尝试解密,别无他法。 3、网友“李向阳”问:“我解开的文件能读,但是有很多很基本的语法问题。不知道是怎么回事!” 对于这个典型问题,我只能回答说,解密出来的文件不可能百分百还原为原始未加密的文件的。在遇到需要手工去修复代码的情况时,就要求Dezender的使用者具备相应的PHP程序编写知识。如果不具备?自己找书找资料看。呵呵。 4、如果出现如下的错误提示:“无法判断程序输入点于动态链接库php5ts.dll上”说明dezender和原有的PHP环境冲突,可考虑卸载原有PHP环境,或安装虚拟机,在虚拟机上使用dezender。实在不行,换台电脑试试看吧。呵呵。虚拟机的下载地址:http://tmd.me/2008/read.php?5 重要声明:   黑刀Dezender本身只是个集成工具而已,主程序实际上只是用Delphi开发的GUI界面的外壳程序,核心的解密功能部分来自互联网上的收集整理,我所做的外壳编程,仅是在原有的各个解密内核版本Dezender的功能上,开发基于windows的用户界面,以便于使用者对原有类似“DOS”环境下的各种应用功能的Windows实现。   关于加密保护自己的PHP程序的问题:   类似微盾加密的、可以混淆函数和变量的加密方式,官方名字叫做“PHPlockit”,微盾的php加密专家也有类似的功能,但似乎会造成程序无法正确运行。目前在我没有开发新版的解密工具之前,据我所知除我之外能手工解密“类微盾加密混淆函数及变量”的人并不多,大家可以试试。其他比较安全的加密方式比如Ioncube等也可以使用,只是国内支持该加密方式的虚拟主机不多,如果是独立服务器,可以考虑采用。   而Zend的混淆函数也是至今无法完全突破的问题,大家在开发自己的PHP程序时,可以采用较长的自定义函数名和变量名,这样Dezender就无法正确的识别出明文来了,就算解密掉程序本身,因为函数和变量都已经被混淆,自然也很难让程序正确运行了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值