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中的登陆login
Jan 18 PHP
php中字符串和正则表达式详解
Oct 23 PHP
thinkphp中字符截取函数msubstr()用法分析
Jan 09 PHP
PHP模拟post提交数据方法汇总
Feb 16 PHP
PHP版微信第三方实现一键登录及获取用户信息的方法
Oct 14 PHP
PHP CURL post数据报错 failed creating formpost data
Oct 16 PHP
php基于curl重写file_get_contents函数实例
Nov 08 PHP
浅谈socket同步和异步、阻塞和非阻塞、I/O模型
Dec 15 PHP
yii2中LinkPager增加总页数和总记录数的实例
Aug 28 PHP
Laravel 6 将新增为指定队列任务设置中间件的功能
Aug 06 PHP
PHP上传图片到数据库并显示的实例代码
Dec 20 PHP
Laravel 框架控制器 Controller原理与用法实例分析
Apr 14 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/03/14 PHP
Yii2.0多文件上传实例说明
2017/07/24 PHP
基于laravel Request的所有方法详解
2019/09/29 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
用js实现的页面关键字密度查询代码
2007/12/27 Javascript
基于jquery插件制作左右按钮与标题文字图片切换效果
2013/11/07 Javascript
IE中JS跳转丢失referrer问题的2个解决方法
2014/07/18 Javascript
jQuery的ready方法详解
2014/11/27 Javascript
node爬取微博的数据的简单封装库nodeweibo使用指南
2015/01/02 Javascript
javascript将异步校验表单改写为同步表单
2015/01/27 Javascript
jQuery动画显示和隐藏效果实例演示(附demo源码下载)
2015/12/31 Javascript
AngularJS实现树形结构(ztree)菜单示例代码
2016/09/18 Javascript
js中删除数组中的某一元素实例(无下标时)
2017/02/28 Javascript
jquery 实现拖动文件上传加载进度条功能
2018/03/18 jQuery
微信小程序实现打卡日历功能
2020/09/21 Javascript
JS实现二维数组元素的排列组合运算简单示例
2019/01/28 Javascript
js实现星星海特效的示例
2020/09/28 Javascript
Python学习笔记之常用函数及说明
2014/05/23 Python
python基础教程之循环介绍
2014/08/29 Python
浅谈MySQL中的触发器
2015/05/05 Python
python 反向输出字符串的方法
2018/07/16 Python
Python实现的多进程拷贝文件并显示百分比功能示例
2019/04/09 Python
python实现基于朴素贝叶斯的垃圾分类算法
2019/07/09 Python
flask开启多线程的具体方法
2020/08/02 Python
浅谈关于html5中图片抛物线运动的一些心得
2018/01/09 HTML / CSS
凯蒂·佩里个人女鞋品牌:Katy Perry Collections
2019/04/04 全球购物
升国旗仪式主持词
2014/03/19 职场文书
《陈涉世家》教学反思
2014/04/12 职场文书
优秀护士先进事迹
2014/05/08 职场文书
银行开户授权委托书格式
2014/10/10 职场文书
2015年八一建军节活动总结
2015/03/20 职场文书
家长对学校的意见和建议
2015/06/03 职场文书
CSS3实现的侧滑菜单
2021/04/27 HTML / CSS
sass 常用备忘案例详解
2021/09/15 HTML / CSS
vue 自定义的组件绑定点击事件
2022/04/21 Vue.js
mysql字段为NULL索引是否会失效实例详解
2022/05/30 MySQL