2014-01-28 8 views
12

Ich habe ein Problem mit meiner PHP-Anwendung. Ich baue eine Serviceanwendung auf, die an unser ERP (selectline) angeschlossen werden soll.Xampp PHP Erstellen COM-Objekt Schwerwiegender Fehler ohne irgendwelche Informationen

Aber ich kann nicht ein COM-Objekt erstellen. Dieser Code:

<?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"; 
?> 

Gibt mir:

Fatal error: in C:\xampp\htdocs\com.php on line 21

Ich habe zwei Umgebungen:

Server 2008 R2 + Xampp v3.1.0 | PHP 5.4.7

Server 2012 R2 + Xampp v3.1.0 | PHP 5.4.7

Ich musste die php_com_dotnet.dll in der php.ini hinzufügen, weil ich COM-Klasse nicht zuvor gefunden hatte.

Da ich COM komplett neu bin, habe ich keine Ahnung, wo ich nach dem Fehler suchen soll.

Darf ihr mir helfen?

Vielen Dank im Voraus

Ich änderte meinen Code ein bisschen:

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

Jetzt bekomme ich:

Failed to create COM object `word.application': Invalid Syntax

ich nicht bekommen, was falsch ist. Nach diesem Artikel http://www.php.net/manual/en/class.com.php gibt es keine Notwendigkeit für zusätzliche Parameter, oder?

+0

Wort ausgelegt ist, nicht in einer Server-Umgebung ausgeführt werden. Selbst wenn Sie dieses Problem lösen, werden Sie viele andere Probleme bekommen. –

+0

Ist Word auf Ihrem Server installiert? Ist die Erweiterung php_com_dotnet.dll in der php.ini aktiviert? – espino316

+1

@ espino316 Ms Word ist auf meinem Server installiert && extension = php_com_dotnet.dll ist in php.ini aktiviert. Stellt sich heraus das Problem war, dass Komponentendienst (COM) von 32 Bit war, während Standardphp in diesen Servern von 64 Bit ist. Die Antwort [Link] (http://www.gfi.com/blog/32bit-object-64bit-environment/) für das Problem ist, dass 32-Bit-COM-Dienst als 64 zu registrieren, fand ich die Lösung für den Server 2008 ich versuchte gleiche Lösung für 2012 Server, aber es wird nicht funktionieren. –

Antwort

0

Haben Sie versucht, geben Apache Service Admin-Rechte in services.msc?
Es wird jedoch erforderlich sein, dass Sie ein Kennwort für das Konto haben, mit dem Sie es ausführen. Hoffe, dass hilft ..

+0

Hallo Migisha. Ich habe das schon ohne Erfolg versucht. –

+0

hast du das zum arbeiten bekommen? – Migisha

0

Stellen Sie sicher, dass die richtige COM-Berechtigung für "Dieser Benutzer" festgelegt ist.

  • Run: "dcomcnfg"
  • erweitern: Komponentendienste> Computer> Arbeitsplatz> DCOM-Konfiguration.
  • Select: "Microsoft Word 97-2003-Dokument"
  • auf der rechten Maustaste und öffnen Sie die Eigenschaften
  • die Registerkarte Identität klicken.
  • Wählen Sie "Dieser Benutzer" und geben Sie den Benutzernamen und das Kennwort für den Benutzer (Administrator) ein.
  • Wenden Sie diese neuen Einstellungen an und testen Sie Ihre COM-Anwendung. Es sollte jetzt gut funktionieren.

Ich hoffe, dass ich viele, viele Stunden von Kopfschmerzen, einige von Ihnen speichern :)

PHP-Setup

  • Aktivieren Sie die COM-Erweiterung in der php.ini

extension=php_com_dotnet.dll

  • Neustart Apach e

Nutzungs

<?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; 
Verwandte Themen