Xampp PHP Создать COM-объект Фатальная ошибка без какой-либо информации

У меня возникла проблема с моим приложением 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";
?>

Возвращает меня:

Неустранимая ошибка: в C:\xampp\htdocs\com.php в строке 21

У меня две среды:

Сервер 2008 R2 + Xampp v3.1.0 | PHP 5.4.7

Сервер 2012 R2 + Xampp v3.1.0 | PHP 5.4.7

Мне пришлось добавить php_com_dotnet.dll в php.ini, потому что раньше у меня был класс 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 нет необходимости в дополнительных параметрах, не так ли?

Ответ 1

Вы пытались предоставить права администратора службы Apache в services.msc? Однако для этого вам потребуется пароль для учетной записи, которую вы используете для ее запуска. Надеюсь, что это поможет.

Ответ 2

Обязательно установите правильное разрешение COM для "Этот пользователь".

  • Run: "dcomcnfg"
  • Развернуть: Сервисы компонентов > Компьютеры > Мой компьютеp > Конфигурация DCOM.
  • Выберите "Документ Microsoft Word 97-2003"
  • Щелкните правой кнопкой мыши по нему и откройте свойства
  • Перейдите на вкладку "Идентификация".
  • Выберите "Этот пользователь" и введите имя пользователя и пароль для пользователя (администратора).
  • Применить эти новые настройки и протестировать COM-приложение. Теперь он должен работать нормально.

Надеюсь, я сэкономлю много и много часов головных болей для некоторых из вас:)

Настройка PHP

  • Включить расширение COM в php.ini

расширение = 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;