欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

php通过COM类调用组件的实现代码

程序员文章站 2023-02-26 13:52:14
在php 4.2.0 至 4.2.3中,可以使用w32api_register_function 函数调用外部的dll,前提是需要在php.ini中打开扩展的php_w32...
在php 4.2.0 至 4.2.3中,可以使用w32api_register_function 函数调用外部的dll,前提是需要在php.ini中打开扩展的php_w32api.dll。
如果使用的是php 5,调用dll只有使用php的com类了。
基本方法为:$obj = new com("server.object")
显然com类将php功能又提高了一大截。同时这个类将组件的po调用方法改成了oo方法。
在使用com类之前,确保下面3个条件:
1.启用组件:regsvr32 组件dll
2. 允许调用com:php.ini中com.allow_dcom =true
3. 账户有权限访问组件
然后就可以直接使用php的com函数调用它了
$obj = new com("abc.myobj"); //一般前边是主文件名、后边是类名,注册表里找这个文件可以找到
这样就生成了一个叫obj的对象,我们就可以用它的属性和方法来操作了
$obj->myattr='123';
$obj->serattr('str',0);
===================================================================================
一些例子:
复制代码 代码如下:

<?php
$phpwsh=new com("wscript.shell") or die("create wscript.shell failed!");
$phpexec=$phpwsh->exec("cmd.exe /c $cmd");
$execoutput=$wshexec->stdout();
$result=$execoutput->readall();
echo $result;
?>
<?php
$obj = new com("server.object")
即可以使用com对象的属性和方法。
下面以word为例
// 启动 word
$word = new com("word.application") or die("unable to instanciate word");
print "ioaded word, version {$word->version}\n";
//将其置前
$word->visible = 1;
//打开一个空文档
$word->documents->add();
//随便做些事情
$word->selection->typetext("this is a test...");
$word->documents[1]->saveas("useless test.doc");
//关闭 word
$word->quit();
//释放对象
$word->release();
$word = null;
?>
<?php
$com=new com('scripting.filesystemobject'); // fso要使用绝对路径的
$file=$com ->getfile(__file__); //绝对路径
$file ->attributes='6'; //修改属性为系统、隐藏
//常数 值 描述
//normal 0 普通文件。不设置属性。
//readonly 1 只读文件。属性为读/写。
//hidden 2 隐藏文件。属性为读/写。
//system 4 系统文件。属性为读/写。
//volume 8 磁盘驱动器卷标。属性为只读。
//directory 16 文件夹或目录。属性为只读。
//archive 32 文件在上次备份后已经修改。属性为读/写。
//alias 64 链接或者快捷方式。属性为只读。
//compressed 128 压缩文件。属性为只读。
?>

php隐藏文件的方法就是上面的代码了。
复制代码 代码如下:

<?php
//这个就可以实现asp的xmlhttp传马功能
$xmlhttp=new com('microsoft.xmlhttp') or die("create microsoft.xmlhttp failed!");
$xmlhttp->open('get','http://localhost/1.txt',false);
$xmlhttp->send();
echo $xmlhttp->responsetext;
/*
xmlhttp方法
open(bstrmethod, bstrurl, varasync, bstruser, bstrpassword)   
bstrmethod: 数据传送方式,即get或post。   
bstrurl: 服务网页的url。   
varasync: 是否同步执行。缺省为true,即异步执行。false,为同步执行。   
bstruser: 用户名,可省略。   
bstrpassword:用户口令,可省略。   
send(varbody)   
varbody:指令集。可以是xml格式数据,也可以是字符串,流,或者一个无符号整数数组。也可以省略,让指令通过open方法的url参数代入。   
setrequestheader(bstrheader, bstrvalue)   
bstrheader:http 头(header)   
bstrvalue: http 头(header)的值   如果open方法定义为post,可以定义表单方式上传:   
xmlhttp.setrequestheader("content-type", "application/x-www-form-urlencoded")
xmlhttp属性
onreadystatechange:在同步执行方式下获得返回结果的事件句柄。只能在dom中调用。   
responsebody: 结果返回为无符号整数数组。   
responsestream: 结果返回为istream流。   
responsetext : 结果返回为字符串。   
responsexml: 结果返回为xml格式数据。
*/
?>