仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1333|回复: 18
打印 上一主题 下一主题

[学习教程] PHP网页设计转帖:PHP4(windows版本)中的COM函数

[复制链接]
不帅 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:27:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
会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->[Object]->[method1]->[method2]->..->[property];

?>

就是这么复杂!

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[1]->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脚本,就会兴奋的手舞足蹈,嘴里还不停的说:太酷了,太酷了。呵呵,很幼稚吧,但这可能就是兴趣。
第二个灵魂 该用户已被删除
沙发
发表于 2015-2-4 13:10:01 | 只看该作者
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
柔情似水 该用户已被删除
板凳
发表于 2015-2-4 22:33:38 | 只看该作者
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
精灵巫婆 该用户已被删除
地板
发表于 2015-2-10 10:10:05 | 只看该作者
php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
再见西城 该用户已被删除
5#
发表于 2015-3-1 04:06:43 | 只看该作者
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
莫相离 该用户已被删除
6#
发表于 2015-3-2 15:43:32 | 只看该作者
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
飘飘悠悠 该用户已被删除
7#
发表于 2015-3-6 23:43:12 | 只看该作者
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
不帅 该用户已被删除
8#
 楼主| 发表于 2015-3-8 14:38:58 | 只看该作者
,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。
山那边是海 该用户已被删除
9#
发表于 2015-3-11 13:19:19 | 只看该作者
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
因胸联盟 该用户已被删除
10#
发表于 2015-3-18 12:44:57 | 只看该作者
有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。
小妖女 该用户已被删除
11#
发表于 2015-3-28 21:13:21 | 只看该作者
刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。
若相依 该用户已被删除
12#
发表于 2015-4-3 22:43:11 | 只看该作者
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
活着的死人 该用户已被删除
13#
发表于 2015-4-11 03:12:11 | 只看该作者
兴趣是最好的老师,百度是最好的词典。
灵魂腐蚀 该用户已被删除
14#
发表于 2015-4-23 04:58:26 | 只看该作者
在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。
透明 该用户已被删除
15#
发表于 2015-4-29 11:45:32 | 只看该作者
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
深爱那片海 该用户已被删除
16#
发表于 2015-6-11 20:00:00 | 只看该作者
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
再现理想 该用户已被删除
17#
发表于 2015-6-22 08:18:25 | 只看该作者
装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。
爱飞 该用户已被删除
18#
发表于 2015-6-25 19:31:32 | 只看该作者
写的比较杂,因为我也是个新手,不当至于大家多多指正。
19#
发表于 2015-7-4 01:07:45 | 只看该作者
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 01:54

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表