WAMP上的PHP随机COM对象问题

时间:2011-07-12 18:09:10

标签: php com apache2

我在PHP应用程序中使用旧的COM对象/ ActiveX控件。它在Windows / Apache下运行。通常情况下一切都很好,但有时我会得到

  

无法创建COM对象'TTF161.TTF1':Objektserver wird beendet,wenn der OLE-Dienst ihn aufruft。

消息的德语部分表示 Objectserver在OLE服务调用时终止。

我尝试使用try-catch封闭对象的创建,但它不起作用。

问题随同一个请求随机发生。因此它与编程逻辑的任何内容无关,我认为这个旧组件只是有点错误并且不时失败。但我想处理这种情况,如再次尝试或给用户一个更好的错误信息。我还可以想象它与apache线程或进程的数量有关。事件日志没有说明任何内容,并且Apache错误日志也是空的。

我很感激任何暗示如何处理/发现问题或者我可能会在哪里找到更多信息。

1 个答案:

答案 0 :(得分:1)

以下代码适用于我(Win XP SP3,PHP 5.2.17(cli)(内置:2011年1月6日17:37:45)):

<?php
  try
  {
    echo "Trying to create object"."\r\n";
    $obj = new COM("FailingObject");
    echo "Object created";
  }
  catch(com_exception $e)
  {
    echo "Caught exception"."\r\n";
    $c = $e->getCode();
    $m = $e->getMessage();
    echo "Error Code: ".dechex($c)."\r\n";
    echo $m;
  }
?>

在命令行上使用PHP执行此脚本会产生预期结果:

  

尝试创建对象
  被捕异常
  错误代码:80080008
  无法创建COM对象`FailingObject':对象服务器在执行时停止   OLE服务联系它

测试对象“FailingObject”是一个使用

的简单ATL COM对象
HRESULT FinalConstruct()
{
    return CO_E_SERVER_STOPPING;
}

在对象创建过程中模拟错误。

我最好的猜测是(我可能完全错误)在你的情况下,错误不是由对象创建引发的,而是由PHP内某处的不同COM调用引发的,然后处理不正确。

您可能会考虑为此行为提交错误报告,因为通常您应该能够捕获错误。