首頁 後端開發 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脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++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 7 上安裝 mysql 嗎 可以在 Windows 7 上安裝 mysql 嗎 Apr 08, 2025 pm 03:21 PM

是的,可以在 Windows 7 上安裝 MySQL,雖然微軟已停止支持 Windows 7,但 MySQL 仍兼容它。不過,安裝過程中需要注意以下幾點:下載適用於 Windows 的 MySQL 安裝程序。選擇合適的 MySQL 版本(社區版或企業版)。安裝過程中選擇適當的安裝目錄和字符集。設置 root 用戶密碼,並妥善保管。連接數據庫進行測試。注意 Windows 7 上的兼容性問題和安全性問題,建議升級到受支持的操作系統。

mysql 無法連接到本地主機怎麼解決 mysql 無法連接到本地主機怎麼解決 Apr 08, 2025 pm 02:24 PM

無法連接 MySQL 可能是由於以下原因:MySQL 服務未啟動、防火牆攔截連接、端口號錯誤、用戶名或密碼錯誤、my.cnf 中的監聽地址配置不當等。排查步驟包括:1. 檢查 MySQL 服務是否正在運行;2. 調整防火牆設置以允許 MySQL 監聽 3306 端口;3. 確認端口號與實際端口號一致;4. 檢查用戶名和密碼是否正確;5. 確保 my.cnf 中的 bind-address 設置正確。

mySQL下載完安裝不了 mySQL下載完安裝不了 Apr 08, 2025 am 11:24 AM

MySQL安裝失敗的原因主要有:1.權限問題,需以管理員身份運行或使用sudo命令;2.依賴項缺失,需安裝相關開發包;3.端口衝突,需關閉佔用3306端口的程序或修改配置文件;4.安裝包損壞,需重新下載並驗證完整性;5.環境變量配置錯誤,需根據操作系統正確配置環境變量。解決這些問題,仔細檢查每個步驟,就能順利安裝MySQL。

MySQL安裝在特定係統版本上報錯的解決途徑 MySQL安裝在特定係統版本上報錯的解決途徑 Apr 08, 2025 am 11:54 AM

MySQL安裝報錯的解決方法是:1.仔細檢查系統環境,確保滿足MySQL的依賴庫要求,不同操作系統和版本需求不同;2.認真閱讀報錯信息,根據提示(例如缺少庫文件或權限不足)採取對應措施,例如安裝依賴或使用sudo命令;3.必要時,可嘗試源碼安裝並仔細檢查編譯日誌,但這需要一定的Linux知識和經驗。最終解決問題的關鍵在於仔細檢查系統環境和報錯信息,並參考官方文檔。

mysql怎麼複製粘貼 mysql怎麼複製粘貼 Apr 08, 2025 pm 07:18 PM

MySQL 中的複制粘貼包含以下步驟:選擇數據,使用 Ctrl C(Windows)或 Cmd C(Mac)複製;在目標位置右鍵單擊,選擇“粘貼”或使用 Ctrl V(Windows)或 Cmd V(Mac);複製的數據將插入到目標位置,或替換現有數據(取決於目標位置是否已存在數據)。

無法從終端訪問 mysql 無法從終端訪問 mysql Apr 08, 2025 pm 04:57 PM

無法從終端訪問 MySQL 可能是由於:MySQL 服務未運行;連接命令錯誤;權限不足;防火牆阻止連接;MySQL 配置文件錯誤。

vs code 可以在 Windows 8 中運行嗎 vs code 可以在 Windows 8 中運行嗎 Apr 15, 2025 pm 07:24 PM

VS Code可以在Windows 8上運行,但體驗可能不佳。首先確保系統已更新到最新補丁,然後下載與系統架構匹配的VS Code安裝包,按照提示安裝。安裝後,注意某些擴展程序可能與Windows 8不兼容,需要尋找替代擴展或在虛擬機中使用更新的Windows系統。安裝必要的擴展,檢查是否正常工作。儘管VS Code在Windows 8上可行,但建議升級到更新的Windows系統以獲得更好的開發體驗和安全保障。

mysql可以在Windows上運行嗎 mysql可以在Windows上運行嗎 Apr 08, 2025 pm 01:54 PM

在 Windows 上運行 MySQL 可行,但需要考慮端口衝突、權限問題和環境變量設置等挑戰。通過自定義配置文件、調整用戶權限和正確設置環境變量,可以解決安裝問題。此外,應選擇合適的存儲引擎、調整配置文件和使用 SSD 以優化性能。

See all articles