首頁 後端開發 php教程 PHP4(windows版本)中的COM函數_PHP教學課程

PHP4(windows版本)中的COM函數_PHP教學課程

Jul 21, 2016 pm 04:08 PM
com windows 函數 版本


PHP4(windows版本)中的COM函數 這幾天一直在寫excel轉換成mysql,發現一篇文章,搜一下phpx論壇,沒有這個帖子,把它轉帖如下:


PHP4(windows版本)中的COM函數


介紹

內建於PHP4裡的COM函數對於我們在win32環境下開發程式是相當有吸引力的,但是至今仍沒有多少相關的技術文件。本文將以三個例子分

別處理 MS office 2000 Word 、 Excel 、 Adob​​​​e 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>; 🎜>最後,PHP4也支援DCOM技術,可以在遠端電腦建立一個物件實例。


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

?>

注意:這是用DCOM指令來設定PHP。在未來,PHP開發者提供Unix下對DCOM的支援。

標識、方法和屬性

標識是一個如下的字串:

MS Word: "Word.Application" 或 "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 的例子如下: [url]http://msdn.microsoft.com/library/officedev/off2000/xltocobjectmodelapplication.htm[/url]


用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文檔. Adob​​​​e 有一

個程式叫Distiller ,它可以產生一個實例。程式碼如下:


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

?>

有一點要注意的,是在Distiller的文檔中給出的這個OLE識別名"pdfdistiller" 是無效的。

蒸餾一個檔案的最基本的方法是:


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

OutputPDF >

這$psfile 是這個PostScript的檔名, strOutputPDF 是輸出檔PDF的檔名。 StrJobOptions 是Distiller的參數檔名,最後兩個參數

是可選的,預設是同一名字。 這PS檔名與PDF檔名,使用這個預設的Joboptions 檔。例如:


$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的結合,提供了一個開放原始碼的解決方案。

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/314786.htmlTechArticlePHP4(windows版本)中的COM函數這幾天一直在寫excel轉換成mysql,發現一篇文章,搜一下phpx論壇,沒有這個帖子,把它轉帖如下: PHP4(windows版本)中的...
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

windows系統dll檔案刪除怎麼辦? 徹底刪除頑固dll檔案的技巧 windows系統dll檔案刪除怎麼辦? 徹底刪除頑固dll檔案的技巧 Jun 12, 2024 pm 02:46 PM

windows系統dll檔案刪除怎麼辦? 徹底刪除頑固dll檔案的技巧

Steam Deck OLED 上的無損縮放以高達 2 倍 FPS 的速度運行遊戲 Steam Deck OLED 上的無損縮放以高達 2 倍 FPS 的速度運行遊戲 Aug 26, 2024 am 10:07 AM

Steam Deck OLED 上的無損縮放以高達 2 倍 FPS 的速度運行遊戲

deepseek網頁版入口 deepseek官網入口 deepseek網頁版入口 deepseek官網入口 Feb 19, 2025 pm 04:54 PM

deepseek網頁版入口 deepseek官網入口

Bybit交易所最新版本怎麼更新?不更新會有影響嗎? Bybit交易所最新版本怎麼更新?不更新會有影響嗎? Feb 21, 2025 pm 10:54 PM

Bybit交易所最新版本怎麼更新?不更新會有影響嗎?

Pi Node教學:什麼是Pi節點?如何安裝和設定Pi Node? Pi Node教學:什麼是Pi節點?如何安裝和設定Pi Node? Mar 05, 2025 pm 05:57 PM

Pi Node教學:什麼是Pi節點?如何安裝和設定Pi Node?

deepseek怎麼安裝 deepseek怎麼安裝 Feb 19, 2025 pm 05:48 PM

deepseek怎麼安裝

excel函數公式大全 excel函數公式大全 May 07, 2024 pm 12:04 PM

excel函數公式大全

在 Vivobook S15 基準測試中,Snapdragon X Elite CPU 的電池效能和插入效能幾乎相同 在 Vivobook S15 基準測試中,Snapdragon X Elite CPU 的電池效能和插入效能幾乎相同 Jun 20, 2024 pm 03:59 PM

在 Vivobook S15 基準測試中,Snapdragon X Elite CPU 的電池效能和插入效能幾乎相同

See all articles