php通過(guò)COM類調(diào)用組件的實(shí)現(xiàn)代碼
更新時(shí)間:2012年01月11日 22:08:23 作者:
COM(Component Object Model)組件對(duì)象模型,是一種跨應(yīng)用和語(yǔ)言共享二進(jìn)制代碼的方法。COM可以作為DLL被本機(jī)程序載入也可以通過(guò)DCOM被遠(yuǎn)程進(jìn)程調(diào)用
在PHP 4.2.0 至 4.2.3中,可以使用w32api_register_function 函數(shù)調(diào)用外部的DLL,前提是需要在php.ini中打開(kāi)擴(kuò)展的php_w32api.dll。
如果使用的是PHP 5,調(diào)用DLL只有使用PHP的COM類了。
基本方法為:$obj = new COM("server.object")
顯然COM類將php功能又提高了一大截。同時(shí)這個(gè)類將組件的PO調(diào)用方法改成了OO方法。
在使用COM類之前,確保下面3個(gè)條件:
1.啟用組件:regsvr32 組件dll
2. 允許調(diào)用COM:php.ini中com.allow_dcom =true
3. 賬戶有權(quán)限訪問(wèn)組件
然后就可以直接使用php的com函數(shù)調(diào)用它了
$obj = new COM("ABC.MyObj"); //一般前邊是主文件名、后邊是類名,注冊(cè)表里找這個(gè)文件可以找到
這樣就生成了一個(gè)叫obj的對(duì)象,我們就可以用它的屬性和方法來(lái)操作了
$obj->MyAttr='123';
$obj->SerAttr('str',0);
===================================================================================
一些例子:
<?php
$phpwsh=new COM("Wscript.Shell") or die("Create Wscript.Shell Failed!");
$phpexec=$phpwsh->exec("cmd.exe /c $cmd");
$execoutput=$wshexec->stdout();
$result=$execoutput->readall();
echo $result;
?>
<?php
$obj = new COM("server.object")
即可以使用COM對(duì)象的屬性和方法。
下面以word為例
// 啟動(dòng) word
$word = new COM("word.application") or die("Unable to instanciate Word");
print "ioaded Word, version {$word->Version}\n";
//將其置前
$word->Visible = 1;
//打開(kāi)一個(gè)空文檔
$word->Documents->Add();
//隨便做些事情
$word->Selection->TypeText("This is a test...");
$word->Documents[1]->SaveAs("Useless test.doc");
//關(guān)閉 word
$word->Quit();
//釋放對(duì)象
$word->Release();
$word = null;
?>
<?php
$com=new COM('Scripting.FileSystemObject'); // FSO要使用絕對(duì)路徑的
$file=$com ->getfile(__FILE__); //絕對(duì)路徑
$file ->attributes='6'; //修改屬性為系統(tǒng)、隱藏
//常數(shù) 值 描述
//Normal 0 普通文件。不設(shè)置屬性。
//ReadOnly 1 只讀文件。屬性為讀/寫(xiě)。
//Hidden 2 隱藏文件。屬性為讀/寫(xiě)。
//System 4 系統(tǒng)文件。屬性為讀/寫(xiě)。
//Volume 8 磁盤(pán)驅(qū)動(dòng)器卷標(biāo)。屬性為只讀。
//Directory 16 文件夾或目錄。屬性為只讀。
//Archive 32 文件在上次備份后已經(jīng)修改。屬性為讀/寫(xiě)。
//Alias 64 鏈接或者快捷方式。屬性為只讀。
//Compressed 128 壓縮文件。屬性為只讀。
?>
PHP隱藏文件的方法就是上面的代碼了。
<?php
//這個(gè)就可以實(shí)現(xiàn)asp的XMLHTTP傳馬功能
$xmlhttp=new COM('Microsoft.XMLHTTP') or die("Create Microsoft.XMLHTTP Failed!");
$xmlhttp->open('GET','http://localhost/1.txt',false);
$xmlhttp->send();
echo $xmlhttp->responseText;
/*
XMLHTTP方法
Open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword)
bstrMethod: 數(shù)據(jù)傳送方式,即GET或POST。
bstrUrl: 服務(wù)網(wǎng)頁(yè)的URL。
varAsync: 是否同步執(zhí)行。缺省為T(mén)rue,即異步執(zhí)行。False,為同步執(zhí)行。
bstrUser: 用戶名,可省略。
bstrPassword:用戶口令,可省略。
Send(varBody)
varBody:指令集。可以是XML格式數(shù)據(jù),也可以是字符串,流,或者一個(gè)無(wú)符號(hào)整數(shù)數(shù)組。也可以省略,讓指令通過(guò)Open方法的URL參數(shù)代入。
setRequestHeader(bstrHeader, bstrvalue)
bstrHeader:HTTP 頭(header)
bstrvalue: HTTP 頭(header)的值 如果Open方法定義為POST,可以定義表單方式上傳:
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
XMLHTTP屬性
onreadystatechange:在同步執(zhí)行方式下獲得返回結(jié)果的事件句柄。只能在DOM中調(diào)用。
responseBody: 結(jié)果返回為無(wú)符號(hào)整數(shù)數(shù)組。
responseStream: 結(jié)果返回為IStream流。
responseText : 結(jié)果返回為字符串。
responseXML: 結(jié)果返回為XML格式數(shù)據(jù)。
*/
?>
如果使用的是PHP 5,調(diào)用DLL只有使用PHP的COM類了。
基本方法為:$obj = new COM("server.object")
顯然COM類將php功能又提高了一大截。同時(shí)這個(gè)類將組件的PO調(diào)用方法改成了OO方法。
在使用COM類之前,確保下面3個(gè)條件:
1.啟用組件:regsvr32 組件dll
2. 允許調(diào)用COM:php.ini中com.allow_dcom =true
3. 賬戶有權(quán)限訪問(wèn)組件
然后就可以直接使用php的com函數(shù)調(diào)用它了
$obj = new COM("ABC.MyObj"); //一般前邊是主文件名、后邊是類名,注冊(cè)表里找這個(gè)文件可以找到
這樣就生成了一個(gè)叫obj的對(duì)象,我們就可以用它的屬性和方法來(lái)操作了
$obj->MyAttr='123';
$obj->SerAttr('str',0);
===================================================================================
一些例子:
復(fù)制代碼 代碼如下:
<?php
$phpwsh=new COM("Wscript.Shell") or die("Create Wscript.Shell Failed!");
$phpexec=$phpwsh->exec("cmd.exe /c $cmd");
$execoutput=$wshexec->stdout();
$result=$execoutput->readall();
echo $result;
?>
<?php
$obj = new COM("server.object")
即可以使用COM對(duì)象的屬性和方法。
下面以word為例
// 啟動(dòng) word
$word = new COM("word.application") or die("Unable to instanciate Word");
print "ioaded Word, version {$word->Version}\n";
//將其置前
$word->Visible = 1;
//打開(kāi)一個(gè)空文檔
$word->Documents->Add();
//隨便做些事情
$word->Selection->TypeText("This is a test...");
$word->Documents[1]->SaveAs("Useless test.doc");
//關(guān)閉 word
$word->Quit();
//釋放對(duì)象
$word->Release();
$word = null;
?>
<?php
$com=new COM('Scripting.FileSystemObject'); // FSO要使用絕對(duì)路徑的
$file=$com ->getfile(__FILE__); //絕對(duì)路徑
$file ->attributes='6'; //修改屬性為系統(tǒng)、隱藏
//常數(shù) 值 描述
//Normal 0 普通文件。不設(shè)置屬性。
//ReadOnly 1 只讀文件。屬性為讀/寫(xiě)。
//Hidden 2 隱藏文件。屬性為讀/寫(xiě)。
//System 4 系統(tǒng)文件。屬性為讀/寫(xiě)。
//Volume 8 磁盤(pán)驅(qū)動(dòng)器卷標(biāo)。屬性為只讀。
//Directory 16 文件夾或目錄。屬性為只讀。
//Archive 32 文件在上次備份后已經(jīng)修改。屬性為讀/寫(xiě)。
//Alias 64 鏈接或者快捷方式。屬性為只讀。
//Compressed 128 壓縮文件。屬性為只讀。
?>
PHP隱藏文件的方法就是上面的代碼了。
復(fù)制代碼 代碼如下:
<?php
//這個(gè)就可以實(shí)現(xiàn)asp的XMLHTTP傳馬功能
$xmlhttp=new COM('Microsoft.XMLHTTP') or die("Create Microsoft.XMLHTTP Failed!");
$xmlhttp->open('GET','http://localhost/1.txt',false);
$xmlhttp->send();
echo $xmlhttp->responseText;
/*
XMLHTTP方法
Open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword)
bstrMethod: 數(shù)據(jù)傳送方式,即GET或POST。
bstrUrl: 服務(wù)網(wǎng)頁(yè)的URL。
varAsync: 是否同步執(zhí)行。缺省為T(mén)rue,即異步執(zhí)行。False,為同步執(zhí)行。
bstrUser: 用戶名,可省略。
bstrPassword:用戶口令,可省略。
Send(varBody)
varBody:指令集。可以是XML格式數(shù)據(jù),也可以是字符串,流,或者一個(gè)無(wú)符號(hào)整數(shù)數(shù)組。也可以省略,讓指令通過(guò)Open方法的URL參數(shù)代入。
setRequestHeader(bstrHeader, bstrvalue)
bstrHeader:HTTP 頭(header)
bstrvalue: HTTP 頭(header)的值 如果Open方法定義為POST,可以定義表單方式上傳:
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
XMLHTTP屬性
onreadystatechange:在同步執(zhí)行方式下獲得返回結(jié)果的事件句柄。只能在DOM中調(diào)用。
responseBody: 結(jié)果返回為無(wú)符號(hào)整數(shù)數(shù)組。
responseStream: 結(jié)果返回為IStream流。
responseText : 結(jié)果返回為字符串。
responseXML: 結(jié)果返回為XML格式數(shù)據(jù)。
*/
?>
相關(guān)文章
PHP中file_get_contents高級(jí)用法實(shí)例
這篇文章主要介紹了PHP中file_get_contents高級(jí)用法,包括了超時(shí)限制及實(shí)現(xiàn)POST等用法,需要的朋友可以參考下2014-09-09php實(shí)現(xiàn)算術(shù)驗(yàn)證碼功能
這篇文章主要為大家詳細(xì)介紹了php實(shí)現(xiàn)算術(shù)驗(yàn)證碼功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12php在多維數(shù)組中根據(jù)鍵名快速查詢其父鍵以及父鍵值的代碼
有一個(gè)多維數(shù)組,有多少維大家可以自定義。假如我們要在這個(gè)數(shù)組中找一個(gè)鍵為'subIndex'的值,我們可以用for、foreach等方法遍歷查找 反過(guò)來(lái),假如我們?nèi)我饨o出一個(gè)或多個(gè)鍵,要求找出這個(gè)鍵的父級(jí)數(shù)組的鍵和值。這又如何實(shí)現(xiàn)?2011-05-05php FPDF類庫(kù)應(yīng)用實(shí)現(xiàn)代碼
php FPDF類庫(kù)應(yīng)用實(shí)現(xiàn)代碼2009-03-03PHP實(shí)現(xiàn)的XXTEA加密解密算法示例
這篇文章主要介紹了PHP實(shí)現(xiàn)的XXTEA加密解密算法,結(jié)合實(shí)例形式分析了php XXTEA加密解密算法類的定義與簡(jiǎn)單使用操作技巧,需要的朋友可以參考下2018-08-08