繁体   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