簡體   English   中英

如何在PHP中的遠程服務器上運行COM對象

[英]How to run COM objects on a remote server in PHP

如何運行位於遠程服務器上dll文件中的COM對象?

根據php.net( http://php.net/manual/en/faq.com.php#faq.com.q8 ):

如何從遠程服務器運行COM對象? 就像您運行本地對象一樣。 您只需要將遠程計算機的IP作為第二個參數傳遞給COM構造函數。

確保已在php.ini中設置com.allow_dcom = TRUE。

我在php.ini中啟用了com.allow_dcom,並根據phpinfo()啟用了com.allow_dcom; 實際上,我確實啟用了COM支持,DCOM支持和.NET支持。 我很難找到有關如何調用遠程對象的示例。

DLL文件(pcmsrv32.dll)位於遠程服務器上的C:\\ Windows中。 我需要訪問存儲在該文件中的對象方法CalcDistance()。

我試圖將文件位置和IP傳遞給COM類:

$obj = new COM("C:\Windows\PCMSRV32.DLL","10.86.0.21");

但這不起作用。 我收到此錯誤:

Fatal error: Uncaught com_exception: Failed to create COM object `C:\Windows\PCMSRV32.DLL': Moniker cannot open file in C:\Users\...\index.php:33

我還嘗試使用PC * Miler | Connect用戶指南中提供的ProgID,並將其用於我的代碼中:

$com = new COM("PCMServer.PCMServer.1","10.86.0.21");

但是,這給了我這個錯誤:

com_exception: Failed to create COM object `PCMServer.PCMServer.1': Invalid syntax 

我究竟做錯了什么?

我最終獲得了PC * Miler支持的聯系,他們給了我一個示例代碼,用於進行可以作為CLI腳本運行的基本調用:

<?php 
  // Create COM Object 
  $pcms = new COM("PCMServer.PCMServer"); 
  // Calculate 
  $dist = $pcms->CalcDistance("12345","23456"); 
  // Returned distance is a INT that needs to be divided by 10 (or the number of decimal places specified in the PCMSServe.ini file located in C:\Windows 
  $properDist = ($dist/10); 

  echo $properDist 
?>

編輯現在我被告知PC * Miler僅在本地提供其COM對象。 因此,除非我將其安裝在正在開發的同一台服務器上,否則將無法使用。 我們將PC * Miler的版本30安裝到我的PHP代碼所在的同一台服務器上,然后嘗試進行安裝。

更新我們在同一服務器上安裝了v.30 PC * Miler,並修復了一個PHP錯誤的補丁,我能夠成功運行以下代碼:

try {
    $pcms = new COM("PCMServer.PCMServer");
}
catch (com_exception $e) {
    print $e . "\n";
}
// Calculate
$dist = $pcms->CalcDistance("Goodyear, AZ","Las Vegas, NV");
$properDist = ($dist/10);
echo $properDist;

$properDist輸出為288英里-我驗證了Google Maps是正確的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM