人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開(kāi)發(fā)教程 > 詳細(xì)頁(yè)面

PHP4(windows版本)中的COM函數(shù)

PHP4(windows版本)中的COM函數(shù)

更新時(shí)間:2022-08-08 文章作者:未知 信息來(lái)源:網(wǎng)絡(luò) 閱讀次數(shù):


PHP4(windows版本)中的COM函數(shù)這幾天一直在寫excel轉(zhuǎn)化成mysql,發(fā)現(xiàn)一篇文章,搜一下phpx論壇,沒(méi)有這個(gè)帖子,把它轉(zhuǎn)帖如下:


PHP4(windows版本)中的COM函數(shù)


介紹

內(nèi)置于PHP4里的COM函數(shù)對(duì)于我們?cè)趙in32環(huán)境下開(kāi)發(fā)程序是相當(dāng)有吸引力的,但是至今仍沒(méi)有多少相關(guān)的技術(shù)文檔。本文將以三個(gè)例子分

別處理 MS office 2000 Word 、 Excel 、 Adobe Distiller 來(lái)說(shuō)明如何在PHP中使用COM函數(shù)。

COM技術(shù)是由Microsoft在幾年前提出并開(kāi)發(fā)的,本文中提到的相關(guān)名詞有OLE, OLE Automation, ActiveX, COM ,這些詞的意思都基本一

樣,都表示用一段封裝的代碼(對(duì)象)來(lái)完成一個(gè)windows 應(yīng)用程序的一些功能。 PHP4 COM 函數(shù)可以連接一個(gè)對(duì)象實(shí)例,并使用它的方法與

屬性。

如果你想使用下面的例子源碼,請(qǐng)參考一下我的配置。

Windows 98 - MS Office 2000
Apache 1.3.9 Windows
PHP4.02 Dev (08-20-00) Running as CGI


PHP4中的COM標(biāo)記

現(xiàn)在讓我們開(kāi)始吧,用PHP4的COM來(lái)實(shí)例化一個(gè)組件,需要 new操作符和對(duì)象的 "OLE 程序標(biāo)識(shí)":


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

?>

因?yàn)镃OM是一個(gè)PHP4的保留字,它傳送這個(gè)對(duì)象的標(biāo)識(shí)給一個(gè)構(gòu)造函數(shù),現(xiàn)在得到了這個(gè)組件的一個(gè)實(shí)例,根據(jù)OOP類的性質(zhì),我們可以很容易

地訪問(wèn)它的方法與屬性。

例如:


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

?>

就是這么簡(jiǎn)單!

OOP的結(jié)構(gòu)在PHP下不能工作,(由于PHP語(yǔ)法的問(wèn)題,屬性的名字.值是非法字符,如點(diǎn)和圓括號(hào)等),所以PHP4提供了兩個(gè)相應(yīng)的函數(shù):


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

mixed com_get(class com_object, string property_name);

?>

最后,PHP4也支持DCOM技術(shù),可以在遠(yuǎn)程計(jì)算機(jī)創(chuàng)建一個(gè)對(duì)象實(shí)例。


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

?>

注意:這是用DCOM指令來(lái)設(shè)置PHP。在將來(lái),PHP開(kāi)發(fā)者提供Unix下對(duì)DCOM的支持。

標(biāo)識(shí)、方法和屬性

標(biāo)識(shí)是一個(gè)如下的字串:

MS Word: "Word.Application" or "Word.Application.9"
MS Excel: "Excel.Application" or "Excel.Sheet"
ADOBE Acrobat: "Exch.application" or "PdfDistiller.PdfDistiller"

對(duì)于最后一個(gè)標(biāo)識(shí),我要指明的是,獲得正確的對(duì)象標(biāo)識(shí)名不是一件容易的事。如果你不能訪問(wèn)VBA文檔,你可以查找一下windows的注冊(cè)

表,在 HKEY_CLASSES_ROOT 中尋找一下,你就可以得到一些應(yīng)用程序的名字。在你的機(jī)器上有效的對(duì)象標(biāo)識(shí)放在 CLSID 子文件夾下。

應(yīng)用程序一般會(huì)提供文檔說(shuō)明它的COM方法和屬性。在office2000中,你可以運(yùn)行程序,打開(kāi)VBA編輯器 ,選擇對(duì)象編輯器。輸入應(yīng)用程序

庫(kù)中的一個(gè)方法名或?qū)傩悦缓螅谙旅娴拇翱谥杏檬髽?biāo)右鍵選擇一個(gè)類或成員名稱,點(diǎn)幫助,你就會(huì)得到關(guān)于這個(gè)類或成員的描述。你也

可以參考 MSDN。一個(gè) Excel 的例子如下: http://msdn.microsoft.com/library/officedev/off2000/xltocobjectmodelapplication.htm


用COM函數(shù)操作 MS Word

現(xiàn)在,我們開(kāi)始第一個(gè)例子吧:


#*********************************************************
# 本例來(lái)自Zend站點(diǎn),略有改動(dòng)
# 打開(kāi)一個(gè)word實(shí)例,并新建一個(gè)文檔Useless test.doc
# 輸入一行文字 "This is a test2..."
#*********************************************************

#實(shí)例化一個(gè)對(duì)象

$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
";

#使其可見(jiàn)

$word->Visible = 1;

#創(chuàng)建新文件

$word->Documents->Add();

#寫字符

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

#保存

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

#關(guān)閉

$word->Quit();

?>

你只要花幾分鐘來(lái)讀這個(gè)程序,并參考Word的OLE 技術(shù)文檔,你將學(xué)到幾乎是你在自己程序中所需的全部的操作。

MS Excel在使用PHP的COM函數(shù)

如同上面的Word的例子一樣,你應(yīng)學(xué)習(xí)這個(gè)例子的同時(shí)參考Excel的Visual Basic 編輯器中的對(duì)象瀏覽器的幫助文檔。


#打開(kāi)workbook和它的sheet,
#本例使用一個(gè)電子表格是Excel安裝時(shí)自帶的SOLVSAMP.XLS

$workbook = "C:Program FilesMicrosoft officeOfficeSamplesSOLVSAMP.XLS";
$sheet = "Quick Tour";

#實(shí)例化一個(gè)組件的對(duì)象
$ex = new COM("Excel.sheet") or Die ("Did not connect");

#取程序名稱和版本
print "Application name:{$ex->Application->value}
" ;
print "Loaded version: {$ex->Application->version}
";

#打開(kāi)工作本使我們可使用它
$wkb = $ex->application->Workbooks->Open($workbook) or Die ("Did not open");

#預(yù)保存原來(lái)的工作本,創(chuàng)建一個(gè)工作本的復(fù)本
$ex->Application->ActiveWorkbook->SaveAs("Ourtest");
#$ex->Application->Visible = 1; #本句去注釋讓Excel可見(jiàn)

# 讀寫一個(gè)單元格在一個(gè)新的工作表中
# 我們可以讀到這個(gè)單元格 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

#最后,用新值重新計(jì)算這個(gè)單元格
$sheets->Calculate;
#必須的如果要計(jì)算,手動(dòng)則是可選的
#可看到效果總價(jià)值(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.
";
#根據(jù)計(jì)算公式,廣告影響了公司的開(kāi)銷,這里將顯示 $57,809

#使用Excel內(nèi)建的函數(shù)
# 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");
#關(guān)閉,不提問(wèn)
$ex->application->ActiveWorkbook->Close("False");
unset ($ex);

?>

這個(gè)例子讓你的PHP與Excel一同工作了,當(dāng)然,也有更多的對(duì)象可以使用,訪問(wèn)一個(gè)自已寫的OOP封裝類也與訪問(wèn)excel一樣容易。

用PHP的COM訪問(wèn) Adobe Distiller

這最后一個(gè)例子不是MS程序了,如果你的程序有一個(gè)PostScript文件,你會(huì)對(duì)這個(gè)有興趣的,改寫(蒸餾)它成為一個(gè)PDF文檔. Adobe 有一

個(gè)程序叫 Distiller ,它可以生成一個(gè)實(shí)例。代碼如下:


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

?>

有一點(diǎn)要注意的,是在Distiller 的文檔中給出的這個(gè)OLE標(biāo)識(shí)名 "pdfdistiller" 是無(wú)效的。

蒸餾一個(gè)文件的最基本的方法是:


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

?>

這 $psfile 是這個(gè)PostScript的文件名, strOutputPDF 是輸出文件PDF的文件名。 StrJobOptions 是Distiller的參數(shù)文件名,最后兩個(gè)參數(shù)

是可選的,默認(rèn)是同一名字。 這PS文件名與PDF文件名,使用這個(gè)默認(rèn)的Joboptions 文件。例如:


$pdf->FileToPdf ($psfile, "", "");
#這兒$psfile 可以是 Myfile.ps 將返回 Myfile.pdf 文件。

?>

在Distiller中有更多的方法和屬性能被用。如果你感興趣,請(qǐng)參考一下Adobe的技術(shù)文檔。


中止/可能的問(wèn)題

如果你的代碼中發(fā)生了什么錯(cuò)誤,你可能會(huì)創(chuàng)建了一個(gè)實(shí)例,但沒(méi)有正常地關(guān)閉它。最糟的是,這個(gè)應(yīng)用程序可能被這個(gè)實(shí)例所保持,結(jié)

果,在你的程序列表中就存在多份這個(gè)程序的副本,即使你更正了這個(gè)錯(cuò)誤也會(huì)干擾你的結(jié)果。解決方法是:修正一個(gè)bug以來(lái)要及時(shí)清除它們

在你重新開(kāi)始運(yùn)行之前,用 并結(jié)束任務(wù)。同樣的原因,在你的代碼最后,也要及時(shí)關(guān)閉這個(gè)程序并刪除這個(gè)實(shí)例。

你有一些技巧在處理 com_get 和 com_set的異常時(shí)。例如:
$Version = Com_get($instance->Application,"Version");

將會(huì)在Word中工作但在Excel中會(huì)產(chǎn)生一個(gè)錯(cuò)誤。

有一些對(duì)象在PHP4中是不能實(shí)例化的,這是因?yàn)檫@個(gè)程序要一個(gè)自定義的接口,但PHP4不支持。


為什么我們要用它?

我希望這三個(gè)例子可以給你一些思考的線索,PHP的COM允許你在PHP的腳本中訪問(wèn)windows4的程序。這個(gè)代碼比ASP簡(jiǎn)單并且能集成其它的

PHP對(duì)數(shù)據(jù)庫(kù)強(qiáng)大的支持功能。Microsoft 在各個(gè)方面都大力銷售這個(gè)COM 技術(shù),在不同的名稱和結(jié)構(gòu)下,如 COM+(Combine COM with

Microsoft Transaction Server MTS), ADO, OLE DB, OWC, Windows DNA, 等等。 PHP 和 Apache的結(jié)合,提供了一個(gè)開(kāi)放源碼的解決方案。

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 来凤县| 紫阳县| 琼中| 洪湖市| 鄄城县| 永和县| 崇阳县| 农安县| 郑州市| 邯郸市| 平安县| 沧源| 商丘市| 信阳市| 武平县| 新巴尔虎左旗| 西充县| 稷山县| 抚顺县| 崇左市| 黄浦区| 晋城| 永宁县| 台山市| 平定县| 株洲县| 静乐县| 苍溪县| 乌拉特后旗| 东港市| 正蓝旗| 甘谷县| 德化县| 广安市| 祥云县| 福泉市| 成都市| 江城| 锦州市| 沐川县| 张家界市|