PHP网页设计转帖:PHP4(windows版本)中的COM函数
会HTML吗?会,我能编好几个大表格排板的网页啦!window|函数 这几天一向在写excel转化成mysql,发明一篇文章,搜一下phpx服装论坛,没有这个帖子,把它转帖以下:PHP4(windows版本)中的COM函数
引见
内置于PHP4里的COM函数关于咱们在win32情况下开辟法式是相当有吸引力的,然而至今仍没有几何相干的手艺文档。本文将以三个例子分
别处置 MS office 2000 Word 、 Excel 、 Adobe Distiller 来讲明若何在PHP中利用COM函数。
COM手艺是由Microsoft在几年条件出并开辟的,本文中提到的相干名词有OLE, OLE Automation, ActiveX, COM ,这些词的意思都根基一
样,都暗示用一段封装的代码(对象)来完成一个windows 使用法式的一些功效。 PHP4 COM 函数可以毗连一个对象实例,并利用它的办法与
属性。
假如你想利用上面的例子源码,请参考一下我的设置装备摆设。
Windows 98 - MS Office 2000
Apache 1.3.9 Windows
PHP4.02 Dev (08-20-00) Running as CGI
PHP4中的COM标志
如今让咱们入手下手吧,用PHP4的COM来实例化一个组件,需求 new 操作符和对象的 "OLE 法式标识":
$instance = new COM("$identifier");
?>
由于COM是一个PHP4的保存字,它传送这个对象的标识给一个机关函数,如今失掉了这个组件的一个实例,依据OOP类的性质,咱们可以很轻易
地会见它的办法与属性。
例如:
$instance->->->->..->;
?>
就是这么复杂!
OOP的布局在PHP下不克不及任务,(因为PHP语法的成绩,属性的名字.值长短法字符,如点和圆括号等),所以PHP4供应了两个响应的函数:
bool com_set(class com_object, string property name, string property_value);
mixed com_get(class com_object, string property_name);
?>
最初,PHP4也撑持DCOM手艺,可以在近程盘算机创立一个对象实例。
$Instance = new COM(string "Component name", string "remote_server_address");
?>
注重:这是用DCOM指令来设置PHP。在未来,PHP开辟者供应Unix下对DCOM的撑持。
标识、办法和属性
标识是一个以下的字串:
MS Word: "Word.Application" or "Word.Application.9"
MS Excel: "Excel.Application" or "Excel.Sheet"
ADOBE Acrobat: "Exch.application" or "PdfDistiller.PdfDistiller"
关于最初一个标识,我要指明的是,取得准确的对象标识名不是一件轻易的事。假如你不克不及会见VBA文档,你可以查找一下windows的注册
表,在 HKEY_CLASSES_ROOT 中寻觅一下,你就能够失掉一些使用法式的名字。在你的机械上无效的对象标识放在 CLSID 子文件夹下。
使用法式普通会供应文档申明它的COM办法和属性。在office2000中,你可以运转法式,翻开VBA编纂器 ,选择对象编纂器。输出使用法式
库中的一个办法名或属性名,然后,鄙人面的窗口顶用鼠标右键选择一个类或成员称号,点匡助,你就会失掉关于这个类或成员的描写。你也
可以参考 MSDN。一个 Excel 的例子以下: http://msdn.microsoft.com/library/officedev/off2000/xltocobjectmodelapplication.htm
用COM函数操作 MS Word
如今,咱们入手下手第一个例子吧:
#*********************************************************
# 本例来自Zend站点,略有修改
# 翻开一个word实例,并新建一个文档Useless test.doc
# 输出一行文字 "This is a test2..."
#*********************************************************
#实例化一个对象
$word = new COM("word.application") or die("Unable to instantiate Word");
#获得并显示版本
print "Loaded Word, version {$word->Version}
";
#另外一种办法去获得版本
$testversion = com_get($word->application,version);
print "Version using Com_get(): $testversion
";
#使其可见
$word->Visible = 1;
#创立新文件
$word->Documents->Add();
#写字符
$word->Selection->TypeText("This is a test...");
#保留
$word->Documents->SaveAs("Useless test.doc");
#封闭
$word->Quit();
?>
你只需花几分钟来读这个法式,并参考Word的OLE 手艺文档,你将学到几近是你在本人法式中所需的全体的操作。
MS Excel在利用PHP的COM函数
好像下面的Word的例子一样,你应进修这个例子的同时参考Excel的Visual Basic 编纂器中的对象阅读器的匡助文档。
#翻开workbook和它的sheet,
#本例利用一个电子表格是Excel装置时自带的SOLVSAMP.XLS
$workbook = "C:Program FilesMicrosoft officeOfficeSamplesSOLVSAMP.XLS";
$sheet = "Quick Tour";
#实例化一个组件的对象
$ex = new COM("Excel.sheet") or Die ("Did not connect");
#取法式称号和版本
print "Application name:{$ex->Application->value}
" ;
print "Loaded version: {$ex->Application->version}
";
#翻开任务本使咱们可以使用它
$wkb = $ex->application->Workbooks->Open($workbook) or Die ("Did not open");
#预保留本来的任务本,创立一个任务本的复本
$ex->Application->ActiveWorkbook->SaveAs("Ourtest");
#$ex->Application->Visible = 1; #本句去正文让Excel可见
# 读写一个单位格在一个新的任务表中
# 咱们可以读到这个单位格 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}
"; #Print the value of the cell:10000
$cell->value = 15000; #Change it to 15000
print "New value = {$cell->value}
";#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.
";
#依据盘算公式,告白影响了公司的开支,这里将显示 $57,809
#利用Excel内建的函数
# 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
";
#Should print monthly payment = $ -1,037.03
#可选,保留
$ex->Application->ActiveWorkbook->SaveAs("Ourtest");
#封闭,不发问
$ex->application->ActiveWorkbook->Close("False");
unset ($ex);
?>
这个例子让你的PHP与Excel一同任务了,固然,也有更多的对象可使用,会见一个自已写的OOP封装类也与会见excel一样轻易。
用PHP的COM会见 Adobe Distiller
这最初一个例子不是MS法式了,假如你的法式有一个PostScript文件,你会对这个有乐趣的,改写(蒸馏)它成为一个PDF文档. Adobe 有一
个法式叫 Distiller ,它可以生成一个实例。代码以下:
$pdf = new COM("pdfdistiller.pdfdistiller.1");
?>
有一点要注重的,是在Distiller 的文档中给出的这个OLE标识名 "pdfdistiller" 是有效的。
蒸馏一个文件的最根基的办法是:
$pdf->FileToPdf ($psfile, strOutputPDF '', strJobOptions "");
?>
这 $psfile 是这个PostScript的文件名, strOutputPDF 是输入文件PDF的文件名。 StrJobOptions 是Distiller的参数文件名,最初两个参数
是可选的,默许是统一名字。 这PS文件名与PDF文件名,利用这个默许的Job options 文件。例如:
$pdf->FileToPdf ($psfile, "", "");
#这儿$psfile 可所以 Myfile.ps 将前往 Myfile.pdf 文件。
?>
在Distiller中有更多的办法和属功能被用。假如你感乐趣,请参考一下Adobe的手艺文档。
中断/能够的成绩
假如你的代码中产生了甚么毛病,你能够会创立了一个实例,但没有正常地封闭它。最糟的是,这个使用法式能够被这个实例所坚持,结
果,在你的法式列表中就存在多份这个法式的正本,即便你更正了这个毛病也会搅扰你的了局。处理办法是:修改一个bug以来要实时排除它们
在你从头入手下手运转之前,用 并停止义务。一样的缘由,在你的代码最初,也要实时封闭这个法式并删除这个实例。
你有一些技能在处置 com_get 和 com_set的异常时。例如:
$Version = Com_get($instance->Application,"Version");
将会在Word中任务但在Excel中会发生一个毛病。
有一些对象在PHP4中是不克不及实例化的,这是由于这个法式要一个自界说的接口,但PHP4不撑持。
为何咱们要用它?
我但愿这三个例子可以给你一些思虑的线索,PHP的COM答应你在PHP的剧本中会见windows4的法式。这个代码比ASP复杂而且能集成其它的
PHP对数据库壮大的撑持功效。Microsoft 在各个方面都鼎力发卖这个COM 手艺,在分歧的称号和布局下,如 COM+(Combine COM with
Microsoft Transaction Server MTS), ADO, OLE DB, OWC, Windows DNA, 等等。 PHP 和 Apache的联合,供应了一个开放源码的处理计划。
在学习PHP这六个月里,每看到一个优秀的php脚本,就会兴奋的手舞足蹈,嘴里还不停的说:太酷了,太酷了。呵呵,很幼稚吧,但这可能就是兴趣。 我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。 对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。 php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。 不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。 在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。 作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。 ,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。 不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。 有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。 刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。 个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。 兴趣是最好的老师,百度是最好的词典。 在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。 不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。 没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。 装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。 写的比较杂,因为我也是个新手,不当至于大家多多指正。 说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年具体的记不清啦,囧。
页:
[1]