PHP4(windows版本)中的COM函數_PHP教學課程
PHP4(windows版本)中的COM函數
這幾天一直在寫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>; 🎜>最後,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文檔. Adobe 有一
個程式叫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的結合,提供了一個開放原始碼的解決方案。

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

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

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

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

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

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

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

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

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