仓酷云

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

[学习教程] PHP网页编程之PHP4(windows版本)中的COM函数

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

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

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

x
就是管理员可以编辑,删除,回复 等功能,。加入管理员功能要加入登陆系统,慢慢你会想在线添加管理员,慢慢你会让自己的作品更漂亮些,慢慢1个完整的留言板就会出来了,window|函数   引见

  内置于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 ,732 before.
";
#依据盘算公式,告白影响了公司的开支,这里将显示 ,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 ,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的联合,供应了一个开放源码的处理计划。


  工具程序用来显示 Rasmus Lerdorf 的个人履历,以及统计网页流量。
沙发
发表于 2015-2-4 13:08:52 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
小妖女 该用户已被删除
板凳
发表于 2015-2-4 21:35:49 | 只看该作者
先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
不帅 该用户已被删除
地板
发表于 2015-2-18 03:44:09 | 只看该作者
本文当是我的笔记啦,遇到的问题随时填充
活着的死人 该用户已被删除
5#
发表于 2015-2-28 00:57:01 | 只看该作者
本文当是我的笔记啦,遇到的问题随时填充
若相依 该用户已被删除
6#
 楼主| 发表于 2015-2-28 18:49:04 | 只看该作者
写的比较杂,因为我也是个新手,不当至于大家多多指正。
山那边是海 该用户已被删除
7#
发表于 2015-3-10 04:32:35 | 只看该作者
先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
乐观 该用户已被删除
8#
发表于 2015-3-14 11:30:37 | 只看该作者
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
因胸联盟 该用户已被删除
9#
发表于 2015-3-17 10:11:34 | 只看该作者
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
深爱那片海 该用户已被删除
10#
发表于 2015-3-20 04:34:33 | 只看该作者
我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:
海妖 该用户已被删除
11#
发表于 2015-3-24 21:25:20 | 只看该作者
开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
再现理想 该用户已被删除
12#
发表于 2015-3-27 06:08:26 | 只看该作者
php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
小女巫 该用户已被删除
13#
发表于 2015-4-14 16:32:27 | 只看该作者
这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己
金色的骷髅 该用户已被删除
14#
发表于 2015-4-18 11:54:01 | 只看该作者
微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox  支持的不是很好,所以能少用还是少用的好。
只想知道 该用户已被删除
15#
发表于 2015-4-21 07:47:41 | 只看该作者
最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。
飘飘悠悠 该用户已被删除
16#
发表于 2015-4-26 22:47:17 | 只看该作者
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
再见西城 该用户已被删除
17#
发表于 2015-5-5 08:50:56 | 只看该作者
这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己
精灵巫婆 该用户已被删除
18#
发表于 2015-5-6 03:11:15 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
分手快乐 该用户已被删除
19#
发表于 2015-5-7 04:59:32 | 只看该作者
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
飘灵儿 该用户已被删除
20#
发表于 2015-7-7 23:31:40 | 只看该作者
学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-23 05:23

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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