Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP COM startet lokal statt auf Remote-Server

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHP COM startet lokal statt auf Remote-Server

    Hallo liebe Community

    Ich hab ein echt schräges Verhalten beim Aufruf der Word Applikation aus PHP via COM-Schnittstelle.

    Das Test-Script sieht wie folgt aus:

    PHP-Code:
    <?PHP    
    session_start
    ();    
    error_reporting(E_ALL);    
    ini_set('display_error',1);      
    echo 
    "COM Remote Test";    
    try {          
        
    com_load_typelib('Word.Application');        
        
    $server = array('server' => '172.16.70.183''username' => 'admin''password' => 'Kennwort1');        
        
    $word = new COM('word.application',$server) or die('Could not start word');        
        echo 
    "Loaded Word, version {$word->Version}";  
         
        
    //bring it to front        
        
    $word->Visible 1;        

        
    //open an empty document        
        
    $word->Documents->Add();    
       
        
    //do some weird stuff        
        
    $word->Selection->TypeText("This is a test...");        
        
    $word->Documents[1]->SaveAs("C:/test.doc");      
     
        
    //closing word        
        
    $word->Quit();        

        
    //free the object        
        
    $word null;      

    } catch (
    Exception $e) {        
        echo 
    'Caught exception: ',  $e->getMessage();    
    }
    ?>
    Das Word wird auch gestartet und das File erstellt, jedoch nicht auf dem Remote-Server wie angegeben sondern lokal. Wenn ich eine IP Adresse festlege welche es nicht gibt, erhalte ich jedoch den Fehler dass der RPC Server nicht verfügbar ist. Das heisst mein Array $server wird schon verarbeitet. Wo hab ich hier einen Überlegungsfehler drin? Das ganz läuft auf Windows 10 64bit Enterprise, XAMPP v.3.2.2, PHP 7.0.2

    Vielen Dank für eure Inputs.
    It's not a bug. It's a feature!

  • #2
    Wo hab ich hier einen Überlegungsfehler drin?
    Ein Mißverständnis des COM "remote server" Prinzips (DCOM)...

    Das (D)COM Objekt - auch wenn es im "remote server" Modus betrieben wird - wird immer nur lokal ausgeführt. (D)COM stellt eine Brücke für RPC Aufrufe dar, die an Programme gerichtet sind, die auf einer entfernten Maschine liegen - es gibt dir aber keine Berechtigungen whatsoever auf dem entfernten Server, dh. du hast keinen Zugriff auf das Dateisystem des remote servers.
    Das DCOM Objekt serialisiert Daten (sog. "marshalling") und reicht sie per RPC (remote procedure call) an den remote host weiter, wo die eigentliche Arbeit erledigt wird. Die Daten werden aber an den Client zurückgeliefert.
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      Okay damit verstehe ich, dass das Dokument am Ende auf meinem lokalen Server unter C:\ gespeichert wird.

      Aber sollte der Word-Prozess nicht auf dem Remote-Server gestartet werden?

      Um das ganze kurz etwas weiter auszuführen, das Ziel ist es per COM Schnittstelle auf ein ERP zuzugreifen welches nur auf dem Remote-Server installiert ist. ( Lokal ist die Anwendung nicht vorhanden )

      Funktioniert dann der ganze Ansatz gar nicht?
      It's not a bug. It's a feature!

      Kommentar


      • #4
        Das Handbuch merkt auch an, daß die Keys für die Serveroption Case-Sensitive sind und laut Handbuch mit Großbuchstaben anfangen.

        Kommentar


        • #5
          @Dormilich: Danke für den Hinweis, es hat allerdings keinen Einfluss. Die Situation bleibt unverändert, er startet das Word auf dem lokalen HOST.

          Vielleicht kann mir Istegllitz kurz erklären wozu der Remote-Server angegeben werden kann, wenn ich den Prozess nicht uf dem entfernten Rechner starten kann.

          Danke euch herzlich für die Unterstützung!
          It's not a bug. It's a feature!

          Kommentar


          • #6
            Moment, habe ich das falsch verstanden? Es wird eine lokales Word per COM gestartet? Oder wie weisst du, das die lokale Version gestartet wurde und nicht die auf dem entfernten host?

            Ich dachte, nur das Speichern würde nur auf das lokale System zugreifen...


            Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

            Kommentar


            • #7
              Ja genau, ich schaue per Task-Manager ob der Prozess gestartet wird und genau dies passiert. Das Word wird auf der lokalen Maschine gestartet.

              Ich habe den Teil mit dem speichern vom Dokument auch entfernt, das gleiche verhalten.

              Word wird lokal gestartet, danach wieder geschlossen. Ich erhalte zudem keine Fehlermeldung oder sonst was.

              Dann hab ich das aber schon richtig verstanden, dass der Sinn vom DCOM ist den Prozess auf der Remote-Maschine auszuführen?

              Danke für deine Unterstützung.
              It's not a bug. It's a feature!

              Kommentar


              • #8
                DCOM ist richtig. Laut Internetthreads ist die Konfiguration alleine etwas fummelig (ich gehe mal davon aus, das du es korrekt konfiguriert hast).

                Wenn ich eine IP Adresse festlege welche es nicht gibt, erhalte ich jedoch den Fehler dass der RPC Server nicht verfügbar ist.
                Dieser Satz macht mich stutzig im Zusammenhang mit deinen anderen Beobachtungen, das passt irgendwie nicht zusammen.
                Die lokale Version sollte nur gestartet werden, wenn du den "Server" Eintrag weglässt, anderenfalls sollte die Applikation auf dem remote-host gestartet werden.

                Das ein Fenster aufgeht ist alleine noch kein Beweis das es die lokale Version ist - COM Objekte lassen sich (je nach Implementation) in einen Container einbetten um GUI zeigen zu können. Der Prozess denn du im Taskmanager siehst könnte also durchaus nur der Container für die Word-GUI sein, die aber dennoch auf dem remote-host ausgeführt wird. Check mal die Versionen lokal & remote ob die unterschiedlich sind. Kannst du auch mal parallel den Taskmanager auf dem remote host beobachten - wird dort ebenfalls ein Word-Prozeß gestartet/beendet?

                Ich muss leider gestehen das ich kein COM Experte bin - ich hab zuletzt um die Jahrtausendwende mit ActiveX gearbeitet (was im Grundsatz auch nur COM-Objekte sind). Mit "remote host" habe ich selber noch nicht gearbeitet...
                Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                Kommentar


                • #9
                  Ja das dachte ich auch, hab aus dem Grund Lokal das Word 2010 und remote Word 2013 um zu sehen welche Word Version angegeben wird. Da steht aber immer Version 14 was Office 2010 bedeutet.

                  Ich habe den Taskmanager ebenfalls offen auf dem Remote-Server aber da passiert nichts. Ich werde sobald ich dazu komme, auf dem Remote Server mal PHP 5.6 installieren und das gleiche Script in die andere Richtung testen.

                  Wäre ja möglich, dass es in PHP7 damit ein Problem gibt. Ich glaube PHP + COM ist eine ziemlich seltene Sache, rein anhand der Beiträge die man im Internet so findet.

                  Ich melde mich nochmal!
                  It's not a bug. It's a feature!

                  Kommentar


                  • #10
                    Hier nochmal was zur Konfiguration von DCOM

                    http://www.active-undelete.com/dcom-configuration.htm

                    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                    Kommentar

                    Lädt...
                    X