文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>COMFunctioninPHP4(Windows)

COMFunctioninPHP4(Windows)

时间:2007-02-17  来源:PHP爱好者

导论

对於一些在Win32环境底下设计程式的人来说,PHP4的内建COM函数是相当吸引人的.到目前为止,并没有太多这个主题的相关文件.这个简短的文章将用三个例子,MS office 2000 Word , Excel 程式和Adobe Distiller程式来解释在真实的PHP4如何使用COM.COM的技术已经由微软再不同的名称下发展好多年了.到这篇文章发表为止,words OLE,OLE Automation, ActiveX,和COM都一样:它们为一个视窗的应用程式指派一个可以执行一些函数的封进内部片段程式码(物件).PHP4 COM连结这个物件(举例说明物件)并使用它的方法和属性

如果你要再生以下的范例,这些是我的配置:

Window98 – MS Office2000

Apache 1.3.9 Windows

PHP4.02 Dev (08-20-00) Running as CGI

在PHP4的COM标签

让我们开使用PHP4来使用COM函数的特定资讯.要举例说明他的构成物件,你必须要用”new”操作和”OLE程式的指定”到这个物件:

<?php

$instance = new COM("$identifier");

?>

既然COM在PHP4中是一个保留的种类名称,它传递建构者指定的物件.现在我们有举例说明的构成物,我们使用OOP类别可以容易的得到它的方法和属性.例如:

<?php

$instance->[Object]->[method1]->[method2]->..->[property];

?>

它是如此的简单

当OOP构造没有作用时,因为有两个PHP4的COM标签函数被使用(在这个PHP语法问题范例,名称和属性的值有无效字元,就像是”.”或”( )”)

<?php

bool com_set(class com_object, string property name, string property_value);

mixed com_get(class com_object, string property_name);

?>

最後, PHP4 也支援 DCOM 在远端电脑产生一个 物件的 instance :

<?php

$Instance = new COM(string "Component name", string "remote_server_address");

?>

注解:在PHP配置中可以设置一个DCOM来指示.PHP发展人员未来可以增加DCOM来支持UNIX.这就是全部,没有其他的函数要记住了!

指定物,方法和属性

指定物都是一些像以下的字串:

For MS Word: "Word.Application" or "Word.Application.9"

MS Excel: "Excel.Application" or "Excel.Sheet"

ADOBE Acrobat: "Exch.application" or "PdfDistiller.PdfDistiller"

就如同最後面指定物所指示,要知道物件的正确名称并不总是非常容易.如果你没有使用到VBA doc,你可以看window视窗的登录(开始-按下执行),并看HKEY-CLASSES_ROOT的目录:扫描下来直到延展清单结束,然後你将的到应用程式的名称.在你的机器上所的到的COM指定物就是带有CLSID子目录的目录.

这个应用程式应该为他的COM方法和数性引证.在OFFICE2000这个案例中,开启应用程式,然後用<ALT+F11>打开visual basic 编辑器,选择物件编辑器<F2>并简短的按下键盘.在应用程式的函式库里面输入方法或属性名称.然後,选择一个分类或成员并且在他下面一个视窗内输入成员名称.藉由所选择的帮助你将的到分类或成员的叙述.你也可以参考MSDN.一个Excel范例在: http://msdn.microsoft.com/

使用MS Word来展示PHP4的COM函数

现在,我们必须要开始写第一个程式码范例:

<?php

#******************************************************

# 这个范例从Zend网站稍微修改而来

# 将要开启一个命名为"Useless test.doc" 的word范例

# 这一行"This is a test2..."将写在内容里面

#******************************************************

#举例说明word构成要素

$word = new COM("word.application") or die("Unable to instantiate Word");

#得到并显示他的版本

print "Loaded Word, version {$word->Version}<BR>";

#用另外一个com_get方法得到版本

$testversion = com_get($word->application,version);

print "Version using Com_get(): $testversion <BR>";

#使的他在视窗中看的到

$word->Visible = 1;

#打开新文件

$word->Documents->Add();

#写一些东西

$word->Selection->TypeText("This is a test...");

#将文件存档

$word->Documents[1]->SaveAs("Useless test.doc");

#在下一行注解,如果你想看到word档案

#手动的关闭word

$word->Quit();

#注解,如果你想看到word档案 然後关闭

?>

如果你花份几分钟用word来研究使用OLE文件范例,你必须要试著练习自己写程式.

用MS Excel来使用PHP4的COM函数

就像是以上的Word范例,从Excel的Visual Basic 编辑的物件浏览器包含求助来研究程式码.

<?php

#设置工作簿并使用它的表单.在这个范例我们

#将使用空白表格程式,并用Excel安装,叫做: SOLVSAMP.XLS

$workbook = "C:Program FilesMicrosoft officeOffice

SamplesSOLVSAMP.XLS";

$sheet = "Quick Tour";

#举例说明空白表格程式构成元素

$ex = new COM("Excel.sheet") or Die ("Did not connect");

#得到应用程式名称和版本

print "Application name:{$ex->Application->value}<BR>" ;

print "Loaded version: {$ex->Application->version}<BR>";

#打开我们要使用的工作簿

$wkb = $ex->application->Workbooks->Open($workbook) or Die ("Did not open");

#建立一个复制的工作簿,所以原来的工作簿将会被保留

$ex->Application->ActiveWorkbook->SaveAs("Ourtest");

#$ex->Application->Visible = 1; #Uncomment to make Excel visible.

# 在新的表单中读和写到一格里面

# 我们要读E11这一格(Advertising in the 4th. Quarter)

$sheets = $wkb->Worksheets($sheet); #Select the sheet

$sheets->activate; #Activate it

$cell = $sheets->Cells(11,5) ; #Select the cell (Row Column number)

$cell->activate; #Activate the cell

print "Old Value = {$cell->value} <BR>"; #Print the value of the cell:10000

$cell->value = 15000; #Change it to 15000

print "New value = {$cell->value}<BR> ";#Print the new value=15000

#最後,用新的值重新计算表单

$sheets->Calculate; #若用手动计算的话

#再看全部值的改变(E13格)

$cell = $sheets->Cells(13,5) ; #Select the cell (Row Column number)

$number = Number_format($cell->value);

print "New Total cost =$$number - was $47,732 before.<BR>";

#应是 $57,809 because the advertising affects the

#Corporate overhead in the cell formula.

#用Excel内建函数的范例

#Function: PMT(percent/12 months,Number of payments,Loan amount)

$pay = $ex->application->pmt(0.08/12,10,10000);

$pay = sprintf("%.2f",$pay);

print "Monthly payment for $10,000 loan @8%

interest /10 months: $ $pay<BR>";

#Should print monthly payment = $ -1,037.03

#随你意的储存更动过的工作簿

$ex->Application->ActiveWorkbook->SaveAs("Ourtest");

#Close all workbooks without questioning

$ex->application->ActiveWorkbook->Close("False");

unset ($ex);

?>

用Adobe Distiller使用PHP的COM

最後的范例并非微软的程式:如果你的程式有产生注解文件,把他转换到PDF文件也许事件有趣的事.Adobe有一个程式叫做Distiller,用以下的程式码我们可以用视窗的版本来举例使用:

<?php

$pdf = new COM("pdfdistiller.pdfdistiller.1");

?>

注意到OLE指示的名称并不明显,尤其是当distiller文件将他提及到”pdfdistiller”(adobe技术性的注意事项#5158)

用到distill文件基本的原则方法是:

<?php

$pdf->FileToPdf ($psfile, strOutputPDF ', strJobOptions "");

?>

$psfile的地方是解说档案名称,strOutputPDF事产生的PDF档案名称.StrJobOptions是Distiller的参数档名称. 使用相同的名称,最後两个参数属性会留下空白,PS档是为了PDF档,并使用预设的选择档.例如:

<?php

$pdf->FileToPdf ($psfile, "", "");

#$psfile 应为 Myfile.ps 结果档为: Myfile.pdf

?>

有更多的方法和属性可供Distiller使用.如果你有兴趣,去看Adobe的技术文件

警告/可能的问题

如果在你的程式码有一些错误,你可能没有在时间内马上将物件和你的程式关闭.更糟的事,这个应用程式立即被保持住.因此,在你修正问题之後,一些复制档将会被保存在你的程式清单和介面.解决的方法是:再修正错误之後,在从新开始之前清理所有程式清单的范例(用<CTRL+ALT+Delete>并结束工作).因为相同的原因,当些程式结束时,总是关闭应用程式并不要连结这个范例.

使用com_get和com_set你可能经历一些奇怪的事.例如:

$Version = Com_get($instance->Application,"Version");

在word可以运作,但在excel却产生问题.

一些物件并不能用PHP4来举例,这些PHP-COM不支持的物件似乎要订做的介面才可以.

为何使用它?

希望这三个范例能够显示给你们做法.PHP COM允许连结许多视窗的程式到PHP处理绪里面.程式码比ASP的还简单而且可以寄托予PHP强而有力的函数加以整合.微软的市场上COM的技术到处都有,并且在不同名称和架构底下,像是COM+(结合COM和Microsoft Translation Server MTS),ADO,OLE DB,OWC,Window DNA,等等.PHP和Apache一起运作,对於这些混乱提供一个开放原始码的解决方案.

PS:看Excel用COM的介面在:

http://phpclasses.upperdesign.com/browse.html?package=86
php爱好者站 http://www.phpfans.net c/vc/c++/java.
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载