php通过COM类调用组件的实现代码
程序员文章站
2022-05-25 21:12:05
在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格式数据。
*/
?>
如果使用的是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格式数据。
*/
?>
推荐阅读
-
PHP通过session id 实现session共享和登录验证的代码_PHP
-
PHP父类调用子类方法的代码例子_PHP教程
-
php调用C代码的实现方法
-
php实现parent调用父类的构造方法与被覆写的方法
-
php实现parent调用父类的构造方法与被覆写的方法,parent被覆
-
php实现过滤UBB代码的类
-
php调用yahoo sina api天气预报的实现代码
-
jyxiaozhi.taobao.com php获取后台Job管理的实现代码
-
chromebookmarkssyncadapter php通过COM类调用组件的实现代码
-
php实现parent调用父类的构造方法与被覆写的方法,parent被覆_PHP教程