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

c盘的users是用户文件夹,主要存放用户的各项配置文件。users文件夹是windows系统的重要文件夹,不能随意删除;它保存了很多用户信息,一旦删除会造成数据丢失,严重的话会导致系统无法启动。

PIN码是Windows系统为了方便用户本地登录而独立于window账户密码的快捷登录密码,是Windows系统新添加的一套本地密码策略;在用户登陆了Microsoft账户后就可以设置PIN来代替账户密码,不仅提高安全性,而且也可以让很多和账户相关的操作变得更加方便。PIN码只能通过本机登录,无法远程使用,所以不用担心PIN码被盗。

启动任务管理器的三个快捷键是:1、“Ctrl+Shift+Esc”,可直接打开任务管理器;2、“Ctrl+Alt+Delete”,会进入“安全选项”的锁定界面,选择“任务管理器”,即可以打开任务管理器;3、“Win+R”,会打开“运行”窗口,输入“taskmgr”命令,点击“确定”即可调出任务管理器。

对于刚刚开始使用PHP的用户来说,如果在Windows操作系统中遇到了“php不是内部或外部命令”的问题,可能会感到困惑。这个错误通常是由于系统无法识别PHP的路径导致的。在本文中,我将为您提供一些可能会导致这个问题的原因和解决方法,以帮助您快速解决这个问题。

windows操作系统的特点包括:1、图形界面;直观高效的面向对象的图形用户界面,易学易用。2、多任务;允许用户同时运行多个应用程序,或在一个程序中同时做几件事情。3、即插即用。4、出色的多媒体功能。5、对内存的自动化管理。

win10自带的onenote是UWP版本;onenote是一套用于自由形式的信息获取以及多用户协作工具,而UWP版本是“Universal Windows Platform”的简称,表示windows通用应用平台,不是为特定的终端设计的,而是针对使用windows系统的各种平台。

因为win10系统是不自带扫雷游戏的,需要用户自行手动安装。安装步骤:1、点击打开“开始菜单”;2、在打开的菜单中,找到“Microsoft Store”应用商店,并点击进入;3、在应用商店主页的搜索框中,搜索“minesweeper”;4、在搜索结果中,点击选择需要下载的“扫雷”游戏;5、点击“获取”按钮,等待获取完毕后自动完成安装游戏即可。

在windows中鼠标指针呈四箭头时一般表示选中对象可以上、下、左、右移动。在Windows中鼠标指针首次用不同的指针来表示不同的状态,如系统忙、移动中、拖放中;在Windows中使用的鼠标指针文件还被称为“光标文件”或“动态光标文件”。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

Dreamweaver CS6
視覺化網頁開發工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

WebStorm Mac版
好用的JavaScript開發工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。