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 相关文章推荐
如何删除多级目录
Oct 09 PHP
手把手教你使用DedeCms V3的在线采集图文教程
Apr 03 PHP
在普通HTTP上安全地传输密码
Jul 21 PHP
php实现首页链接查询 友情链接检查的代码
Jan 05 PHP
计算php页面运行时间的函数介绍
Jul 01 PHP
PHP获取一段文本显示点阵宽度和高度的方法
Mar 12 PHP
PHP测试成功的邮件发送案例
Oct 26 PHP
form表单传递数组数据、php脚本接收的实例
Feb 09 PHP
php微信开发之谷歌测距
Jun 14 PHP
php解决安全问题的方法实例
Sep 19 PHP
PHP的Trait机制原理与用法分析
Oct 18 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
Mar 27 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
安装PHP可能遇到的问题“无法载入mysql扩展” 的解决方法
2007/04/16 PHP
深入mysql_fetch_row()与mysql_fetch_array()的区别详解
2013/06/05 PHP
php实现的农历算法实例
2015/08/11 PHP
基于PHP给大家讲解防刷票的一些技巧
2015/11/18 PHP
php+ajax实现无刷新分页
2015/11/18 PHP
PHP判断用户是否已经登录(跳转到不同页面或者执行不同动作)
2016/09/22 PHP
PHP编程实现计算抽奖概率算法完整实例
2017/08/09 PHP
jQuery使用手册之三 CSS操作
2007/03/24 Javascript
ExtJS 入门
2010/10/29 Javascript
jQuery操作select的实例代码
2012/06/14 Javascript
js转义字符介绍
2013/11/05 Javascript
JQuery中serialize() 序列化
2015/03/13 Javascript
jQuery实现360°全景拖动展示
2015/03/18 Javascript
jQuery中on绑定事件后引发的事件冒泡问题如何解决
2016/05/25 Javascript
Angular.JS利用ng-disabled属性和ng-model实现禁用button效果
2017/04/05 Javascript
[01:34:42]NAVI vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python中的包和模块实例
2014/11/22 Python
django用户注册、登录、注销和用户扩展的示例
2018/03/19 Python
Pycharm远程调试原理及具体配置详解
2019/08/08 Python
python 使用pdfminer3k 读取PDF文档的例子
2019/08/27 Python
CSS3制作彩色进度条样式的代码示例分享
2016/06/23 HTML / CSS
html5 Canvas画图教程(7)—canvas里画曲线之quadraticCurveTo方法
2013/01/09 HTML / CSS
使用canvas实现黑客帝国数字雨效果
2020/01/02 HTML / CSS
adidas旗下高尔夫装备供应商:TaylorMade Golf(泰勒梅高尔夫)
2016/08/28 全球购物
戴尔英国翻新电脑和电子产品:Dell UK Refurbished Computers
2019/07/30 全球购物
Vision Direct比利时:在线订购隐形眼镜
2019/08/27 全球购物
SAZAC的动物连体衣和动物睡衣:Kigurumi Shop
2020/03/14 全球购物
如何找出EMP表里面SALARY第N高的employee
2013/12/05 面试题
网站开发实习生的自我评价
2013/12/11 职场文书
公司端午节活动方案
2014/02/04 职场文书
多媒体专业自我鉴定
2014/02/28 职场文书
采购意向书范本
2014/03/31 职场文书
《最大的麦穗》教学反思
2014/04/17 职场文书
作风建设年活动实施方案
2014/10/24 职场文书
为Java项目添加Redis缓存的方法
2021/05/18 Redis
SpringBoot2零基础到精通之数据库专项精讲
2022/03/22 Java/Android