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
PHP中的string类型使用说明
Jul 27 PHP
php去除换行符的方法小结(PHP_EOL变量的使用)
Feb 16 PHP
php中Y2K38的漏洞解决方法实例分析
Sep 22 PHP
thinkphp的URL路由规则与配置实例
Nov 26 PHP
超详细的php用户注册页面填写信息完整实例(附源码)
Nov 17 PHP
ThinkPHP使用Smarty第三方插件方法小结
Mar 19 PHP
PHP的PDO操作简单示例
Mar 30 PHP
Yii2实现ActiveForm ajax提交
May 26 PHP
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
Jun 21 PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
Oct 21 PHP
php实现记事本案例
Oct 20 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实现计数器方法小结
2015/01/05 PHP
使用Node.js配合Nginx实现高负载网络
2015/06/28 Javascript
jQuery实现的Div窗口震动效果实例
2015/08/07 Javascript
js判断登陆用户名及密码是否为空的简单实例
2016/05/16 Javascript
js以分隔符分隔数组中的元素并转换为字符串的方法
2016/11/16 Javascript
js生成随机颜色方法代码分享(三种)
2016/12/29 Javascript
AngularJS中update两次出现$promise属性无法识别的解决方法
2017/01/05 Javascript
jQuery实现页面滚动时智能浮动定位
2017/01/08 Javascript
jquery封装插件时匿名函数形参和实参的写法解释
2017/02/14 Javascript
Vuejs 组件——props数据传递的实例代码
2017/03/07 Javascript
关于react-router/react-router-dom v4 history不能访问问题的解决
2018/01/08 Javascript
详解如何使用webpack打包JS
2018/06/21 Javascript
Vue点击切换颜色的方法
2018/09/13 Javascript
如何从零开始手写Koa2框架
2019/03/22 Javascript
jQuery实现动态操作table行
2020/11/23 jQuery
linux系统使用python获取内存使用信息脚本分享
2014/01/15 Python
python实现文件路径和url相互转换的方法
2015/07/06 Python
Python基于Flask框架配置依赖包信息的项目迁移部署
2018/03/02 Python
Python正则表达式和元字符详解
2018/11/29 Python
Python实现的批量修改文件后缀名操作示例
2018/12/07 Python
django rest framework 实现用户登录认证详解
2019/07/29 Python
Python requests.post方法中data与json参数区别详解
2020/04/30 Python
python中round函数如何使用
2020/06/19 Python
python,Java,JavaScript实现indexOf
2020/09/09 Python
css3给背景图片加颜色遮罩的方法
2019/11/05 HTML / CSS
台湾乐天市场:日本No.1的网路购物网站
2017/03/22 全球购物
英国工艺品购物网站:Minerva Crafts
2018/01/29 全球购物
运动会解说词100字
2014/01/31 职场文书
政府门卫岗位职责
2014/04/29 职场文书
小城镇建设汇报材料
2014/08/16 职场文书
交通安全横幅标语
2014/10/07 职场文书
优秀班干部主要事迹材料
2015/11/04 职场文书
mysql外连接与内连接查询的不同之处
2021/06/03 MySQL
go使用Gin框架利用阿里云实现短信验证码功能
2021/08/04 Golang
TV动画《政宗君的复仇》第二季制作决定PV公布
2022/04/02 日漫
Python Numpy库的超详细教程
2022/04/06 Python