php 通过 COM 类调用组件的实现代码
在 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);
===================================================================================
一些例子:
代码如下:$phpwsh=newCOM("Wscript.Shell")ordie("Create Wscript.Shell Failed!");
$phpexec=$phpwsh->exec("cmd.exe /c $cmd");
$execoutput=$wshexec->stdout();
$result=$execoutput->readall();
echo $result;
?>
$obj=newCOM("server.object")
即可以使用 COM 对象的属性和方法
下面以 word 为例// 启动 word
$word=newCOM("word.application")ordie("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;
?>
$com=newCOM('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 隐藏文件的方法就是上面的代码了
代码如下:// 这个就可以实现 asp 的 XMLHTTP 传马功能
$xmlhttp=newCOM('Microsoft.XMLHTTP')ordie("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 格式数据
*/
?>
来源: https://www.php1.cn/detail/php-19b681c9e3.html