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 相关文章推荐
PHP strtr() 函数使用说明
Nov 21 PHP
PHP中实现汉字转区位码应用源码实例解析
Jun 14 PHP
PHP file_exists问题杂谈
May 07 PHP
PHP的基本常识小结
Jul 05 PHP
async和DOM Script文件加载比较
Jul 20 PHP
VB中的RasEnumConnections函数返回632错误解决方法
Jul 29 PHP
php格式化日期实例分析
Nov 12 PHP
PHP解密Unicode及Escape加密字符串
May 17 PHP
详解PHP中的PDO类
Jul 06 PHP
php 魔术常量详解及实例代码
Dec 04 PHP
PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】
Apr 24 PHP
Yii框架操作cookie与session的方法实例详解
Sep 04 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
一个基于PDO的数据库操作类
2011/03/24 PHP
php动态实现表格跨行跨列实现代码
2012/11/06 PHP
Zend Framework入门之环境配置及第一个Hello World示例(附demo源码下载)
2016/03/21 PHP
PHP使用redis消息队列发布微博的方法示例
2017/06/22 PHP
PDO操作MySQL的基础教程(推荐)
2017/08/18 PHP
js常用排序实现代码
2010/12/28 Javascript
setTimeout的延时为0时多个浏览器的区别
2012/05/23 Javascript
jquery中交替点击事件的实现代码
2014/02/14 Javascript
jQuery实现的多选框多级联动插件
2014/05/02 Javascript
node.js中的fs.lchown方法使用说明
2014/12/16 Javascript
JavaScript函数的调用以及参数传递
2015/10/21 Javascript
javaScript 事件绑定、事件冒泡、事件捕获和事件执行顺序整理总结
2016/10/10 Javascript
理解JavaScript原型链
2016/10/25 Javascript
js实现自动轮换选项卡
2017/01/13 Javascript
vue自定义指令directive实例详解
2018/01/17 Javascript
浅谈react性能优化的方法
2018/09/05 Javascript
Easyui 关闭jquery-easui tab标签页前触发事件的解决方法
2019/04/28 jQuery
jQuery实现条件搜索查询、实时取值及升降序排序的方法分析
2019/05/04 jQuery
ES6的解构赋值实例详解
2019/05/06 Javascript
Node.js HTTP服务器中的文件、图片上传的方法
2019/09/23 Javascript
Vue使用JSEncrypt实现rsa加密及挂载方法
2020/02/07 Javascript
如何基于javascript实现贪吃蛇游戏
2020/02/09 Javascript
vue自定义指令限制输入框输入值的步骤与完整代码
2020/08/30 Javascript
[56:56]VG vs LGD 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
跟老齐学Python之编写类之三子类
2014/10/11 Python
Python聚类算法之基本K均值实例详解
2015/11/20 Python
python使用psutil模块获取系统状态
2016/08/27 Python
Python django实现简单的邮件系统发送邮件功能
2017/07/14 Python
python集合比较(交集,并集,差集)方法详解
2018/09/13 Python
Python如何实现定时器功能
2020/05/28 Python
html5 CSS过度-webkit-transition使用介绍
2013/07/02 HTML / CSS
LivingSocial爱尔兰:爱尔兰本地优惠
2018/08/10 全球购物
大客户销售经理职责
2013/12/04 职场文书
小学教学工作总结2015
2015/05/13 职场文书
教师实习自我鉴定总结
2019/08/20 职场文书
《学会生存》读后感3篇
2019/12/09 职场文书