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


Posted in PHP onJanuary 11, 2012

在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 相关文章推荐
dedecms中显示数字验证码的修改方法
Mar 21 PHP
在PHP中检查PHP文件是否有语法错误的方法
Dec 23 PHP
VB中的RasEnumConnections函数返回632错误解决方法
Jul 29 PHP
PHP自动重命名文件实现方法
Nov 04 PHP
PHP定时执行任务实现方法详解(Timer)
Jul 30 PHP
PHP中模拟链表和链表的基本操作示例
Feb 27 PHP
浅谈ThinkPHP中initialize和construct的区别
Apr 01 PHP
ThinkPHP 3.2.2实现事务操作的方法
May 05 PHP
CI框架(CodeIgniter)公共模型类定义与用法示例
Aug 10 PHP
php之header的不同用法总结(实例讲解)
Nov 28 PHP
PHP使用两个栈实现队列功能的方法
Jan 15 PHP
一文搞懂php的垃圾回收机制
Jun 18 PHP
关于IIS php调用com组件的权限问题
Jan 11 #PHP
Uncaught exception com_exception with message Failed to create COM object
Jan 11 #PHP
比file_get_contents稳定的curl_get_contents分享
Jan 11 #PHP
学习使用curl采集curl使用方法
Jan 11 #PHP
PHP 日,周,月点击排行统计
Jan 11 #PHP
php删除页面记录 同时刷新页面 删除条件用GET方式获得
Jan 10 #PHP
PHP求小于1000的所有水仙花数的代码
Jan 10 #PHP
You might like
建立动态的WML站点(二)
2006/10/09 PHP
DEDE实现转跳属性文档在模板上调用出转跳地址
2016/11/04 PHP
PHP实现一个轻量级容器的方法
2019/01/28 PHP
javascript 对象的定义方法
2007/01/10 Javascript
jQuery.extend 函数详解
2012/02/03 Javascript
获取select元素被选中的文本内容的js代码
2014/01/29 Javascript
jquery处理json数据实例分析
2014/06/03 Javascript
JavaScript基础语法、dom操作树及document对象
2014/12/02 Javascript
javascript实现图片跟随鼠标移动效果的方法
2015/05/13 Javascript
JavaScript中的replace()方法使用详解
2015/06/06 Javascript
一种Javascript解释ajax返回的json的好方法(推荐)
2016/06/02 Javascript
JS操作JSON方法总结(推荐)
2016/06/14 Javascript
在Vue中获取组件声明时的name属性方法
2018/09/12 Javascript
angular4 获取wifi列表中文显示乱码问题的解决
2018/10/20 Javascript
jquery多级树形下拉菜单的实例代码
2019/07/09 jQuery
jQuery实现聊天对话框
2020/02/08 jQuery
解决vue 给window添加和移除resize事件遇到的坑
2020/07/21 Javascript
[47:21]Liquid vs TNC Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
python模拟Django框架实例
2016/05/17 Python
Python人脸识别初探
2017/12/21 Python
Python定时发送天气预报邮件代码实例
2019/09/09 Python
python 实现人和电脑猜拳的示例代码
2020/03/02 Python
超全Python图像处理讲解(多模块实现)
2020/04/13 Python
Python startswith()和endswith() 方法原理解析
2020/04/28 Python
英国一家集合了众多有才华设计师品牌的奢侈店:Wolf & Badger
2018/04/18 全球购物
英国100%防污和防水的靴子:Muck Boot Company
2020/09/08 全球购物
毕业生造价工程师求职信
2013/10/17 职场文书
大学生自我评价怎样写好
2013/10/23 职场文书
幼儿园优秀教师事迹
2014/02/13 职场文书
关于抽烟的检讨书
2014/02/25 职场文书
销售总经理岗位职责
2014/03/15 职场文书
孩子教育的心得体会
2014/09/01 职场文书
光学与应用专业毕业生求职信
2014/09/01 职场文书
三行辞职书范文
2015/02/26 职场文书
在HTML5 localStorage中存储对象的示例代码
2021/04/21 Javascript
关于vue中如何监听数组变化
2021/04/28 Vue.js