【问题标题】:Xampp PHP Create COM Object Fatal Error without any infoXampp PHP 创建 COM 对象致命错误,没有任何信息
【发布时间】:2014-02-19 18:28:13
【问题描述】:

我的 php 应用程序出现问题。我正在构建一个服务应用程序,它应该连接到我们的 ERP (selectline)。

但我无法创建 COM 对象。这段代码:

<?PHP
error_reporting(E_ALL);
session_start();
date_default_timezone_set('Europe/Zurich');
echo time();
$obj = new COM("fd6c8b29-e936-4a61-8da6-b0c12ad3ba00") or die("Unable to instantiate Word");
echo "Loaded Word, version {$word->Version}\n";
?>

返回我:

致命错误:在第 21 行的 C:\xampp\htdocs\com.php 中

我有两个环境:

Server 2008 R2 + Xampp v3.1.0 |PHP 5.4.7

Server 2012 R2 + Xampp v3.1.0 | PHP 5.4.7

我不得不在 php.ini 中添加 php_com_dotnet.dll,因为我之前没有找到 COM 类。

由于我对 COM 完全陌生,我不知道在哪里搜索失败。

希望你们能帮帮我。

提前致谢

我稍微修改了代码:

try {
$obj = new COM("word.application") or die("Unable to instantiate Word");
} catch (Exception $e) {
echo $e->getMessage() . "\n";
}

现在我明白了:

创建 COM 对象 `word.application' 失败:语法无效

我不明白有什么问题。根据这篇文章http://www.php.net/manual/en/class.com.php 不需要额外的参数,对吧?

【问题讨论】:

  • Word 不是为在服务器环境中运行而设计的。即使你解决了这个问题,你也会遇到许多其他问题。
  • 您的服务器中是否安装了 Word? php.ini 中是否启用了 extension=php_com_dotnet.dll?
  • @espino316 Ms Word 安装在我的服务器中 && extension=php_com_dotnet.dll 在 php.ini 中启用。原来问题是组件服务(COM)是 32 位的,而这些服务器中的默认 php 是 64 位的。问题的答案link 是将 32 位 COM 服务注册为 64,我找到了 2008 服务器的解决方案,我为 2012 服务器尝试了相同的解决方案,但它不起作用。

标签: php windows com xampp


【解决方案1】:

确保为“此用户”设置正确的 COM 权限。

  • 运行:“dcomcnfg”
  • 展开:组件服务 > 计算机 > 我的电脑 > DCOM 配置。
  • 选择:“Microsoft Word 97-2003 文档”
  • 右键单击它并打开属性
  • 单击身份选项卡。
  • 选择“此用户”并输入(管理员)用户的用户名和密码。
  • 应用这些新设置并测试您的 COM 应用程序。现在应该可以正常工作了。

我希望我可以为你们中的一些人节省很多时间:)

PHP 设置

  • 在 php.ini 中启用 COM 扩展

extension=php_com_dotnet.dll

  • 重启 Apache

用法

<?php

try {
    $word = new COM("word.application");
} catch (Exception $ex) {
    echo $ex->getMessage();
    exit;
}

$word->Screenupdating = true;
$word->WindowState = 2;
$word->Visible = 0;
$word->CheckLanguage = false;
$word->Options->Overtype = false;
$word->Options->SaveInterval = 0;
$word->Assistant->Visible = false;
$word->DisplayAlerts = false;

// Do fancy stuff...

// Close word
$word->Quit();
$word = null;

【讨论】:

    【解决方案2】:

    您是否尝试在 services.msc 中授予 Apache 服务管理员权限?
    不过,它会要求您在用于运行它的帐户上有一个密码。 希望对您有所帮助..

    【讨论】:

      猜你喜欢
      • 2014-07-04
      • 2018-05-26
      • 2016-07-05
      • 2017-01-21
      • 2022-10-05
      • 1970-01-01
      • 2019-01-11
      • 1970-01-01
      • 2012-05-29
      相关资源
      最近更新 更多