los manas: Autmomatisch Datenstring von Server zu Server schicken

Hallo,

Folgende Bsp.-Situation:

Server 1 mit Webpage 1 hat will immer wissen wenn auf Server 2 mit Webpage 2 ein Formular abgeschickt wurde und möchte dieses Ergeignis in seiner Datenbank speichern.

Wie ist das realisierbar?
PHP kann schließlich nur auf den eigenen Server zugreifen.

Liebe Grüße

Los Manas

  1. Hi los,

    Wie ist das realisierbar?
    PHP kann schließlich nur auf den eigenen Server zugreifen.

    Wie wärs mit HTML?

    <!-- Quellcode auf http://server1.example.org/formular.html -->  
    <form action="http://server2.example.org/script.php" method="post">  
      <!-- ... -->  
      <input type="submit" name="senden" value="An Server 2 senden" />  
    </form>
    

    Oder willst du die Formulareingaben etwa auf beiden Servern haben?

    Viele Grüße,
      ~ Dennis.

    1. Hi.

      Wie wärs mit HTML?

      oh gott, war das so schwer zu verstehen was ich meinte

      Oder willst du die Formulareingaben etwa auf beiden Servern haben?

      Richtig.

      Bsp.

      Server 1 Webpage 1

      Formular wird abgeschickt, verarbeitetm in MySQL Datenbank reingeschrieben.

      Anschließend wird das ganze an

      Server 2 Webpage 2

      weitergeschickt (Also andere Seite, anderer Server, anderer Standort, anderes Skript) Dieses Skript verarbeitet die Daten dann auch nochmal weiter...

      1. Hi los,

        oh gott, war das so schwer zu verstehen was ich meinte

        Oh Gott, ist das denn so schwer präzise zu sagen, was man machen möchte? [Tipps für Fragende]

        Dieses Skript verarbeitet die Daten dann auch nochmal weiter...

        Dann sende die Daten doch an deinen Server 2, fsockopen(), ein bisschen HTTP und dann die Daten in irgendeinem, von dir bevorzugtem Format - z.B. XML oder als application/x-www-form-urlencoded.

        Als Beispiel mag dir das hier dienen.

        Viele Grüße,
          ~ Dennis.

        1. Hi.

          Sorry.

          Als Beispiel mag dir das hier dienen.

          Danke.
          Nochmehr beispiele und Tuts?

          lg

          1. Hi los,

            Danke. Nochmehr beispiele und Tuts?

            Nehme die Funktion PostToHost() aus dem von mir verlinkten Tutorial, verwende als Content-Type text/xml anstelle von application/x-www-form-urlencoded und übergebe als $data_to_send ein XML-Dokument, z.B.:

            ~~~xml <?xml version='1.0' standalone='yes' ?>
              <daten>
                <variable name="foo">bar</variable>
                <variable name="test">Some interesting stuff</variable>
              </daten>

              
            Überlege dir halt, wie du deine gut in XML repräsentieren kannst. Um deine Arbeit anderen Entwicklern verständlich zu machen, welche z.B. deine Schnittstellen verwenden sollen, schreibe eine [DTD](http://de.selfhtml.org/xml/dtd/index.htm) und notiere dein XML entsprechend danach.  
              
            Im empfangenden Script kommst du nun so an die Daten ran:  
              
              ~~~php
            // read [link:http://de2.php.net/manual/de/wrappers.php.php@title=input] data  
              $data = "";  
              $fp = fopen("php://input","r");  
              while(!@feof($fp)){  
                $data .= fgets($fp);  
              }  
              fclose($fp);  
              
              if(empty($data)) {  
                // Hier eine Fehlerbehandlung einfügen! z.B.:  
                header("Status: 406 Not Acceptable");  
                die("No data received!");  
              }  
              
              // in einem Projekt von mir folgenden hier nun noch  
              // Validierungen von $data mittels [link:http://de2.php.net/manual/de/function.xml-parse.php@title=xml_parse()] und  
              // [link:http://de2.php.net/manual/de/function.dom-domdocument-validate.php@title=DOMDocument->validate()] für letzteres ist aber  
              // eine DTD notwendig  
              
              // create [link:http://de2.php.net/simplexml@title=SimpleXML] Object from string  
              $xml_object = simplexml_load_string($data);
            

            Vielleicht hilft dir das ja weiter, in meinem Fall ist der Client allerdings kein PHP-Script von einem anderen Server, sondern eine in C#.NET geschriebene Windows-Software, welche lokal bei dem Benutzer des Systems auf dem PC läuft.

            Viele Grüße,
              ~ Dennis.

            1. Moin!

              Danke. Nochmehr beispiele und Tuts?

              Nehme die Funktion PostToHost() aus dem von mir verlinkten Tutorial, verwende als Content-Type text/xml anstelle von application/x-www-form-urlencoded und übergebe als $data_to_send ein XML-Dokument, z.B.:

              ~~~xml

              <?xml version='1.0' standalone='yes' ?>

              <daten>
                  <variable name="foo">bar</variable>
                  <variable name="test">Some interesting stuff</variable>
                </daten>

                
              Man kann versuchen, es noch komplizierter zu machen, aber mir fallen da kaum noch Möglichkeiten ein.  
                
              Wäre die einfachste Methode, mit POST Daten von einem Server zum anderen zu schicken, nicht die Nutzung von Standard-Schnittstellen?  
                
              So wie Browser die Daten per POST an den Server schicken, ist es doch prima. Damit kann PHP direkt was anfangen, füllt ganz automatisch $\_POST, und der Programmierer kann ohne Zusatzarbeit und Abhängigkeit von XML-Bibliotheken etc. loslegen.  
                
              :)  
                
               - Sven Rautenberg
              
              -- 
              "Love your nation - respect the others."
              
              1. Hallo.

                Man kann versuchen, es noch komplizierter zu machen, aber mir fallen da kaum noch Möglichkeiten ein.

                Wäre die einfachste Methode, mit POST Daten von einem Server zum anderen zu schicken, nicht die Nutzung von Standard-Schnittstellen?

                So wie Browser die Daten per POST an den Server schicken, ist es doch prima. Damit kann PHP direkt was anfangen, füllt ganz automatisch $_POST, und der Programmierer kann ohne Zusatzarbeit und Abhängigkeit von XML-Bibliotheken etc. loslegen.

                Hä?
                Und wie soll ich dann bitte mein Vorhaben machen?
                Hast du dir die ganzen Posts durchgelesen?

                Ich will nach abschicken des Formulars die Daten bearbeiten und in eine DB eintragen und anschließend alles weiter schicken zum nächsten _Server_ auf dem ein weiteres Skript ist, das diese Sachen wieder verarbeitet.

                1. Moin!

                  Man kann versuchen, es noch komplizierter zu machen, aber mir fallen da kaum noch Möglichkeiten ein.

                  Wäre die einfachste Methode, mit POST Daten von einem Server zum anderen zu schicken, nicht die Nutzung von Standard-Schnittstellen?

                  So wie Browser die Daten per POST an den Server schicken, ist es doch prima. Damit kann PHP direkt was anfangen, füllt ganz automatisch $_POST, und der Programmierer kann ohne Zusatzarbeit und Abhängigkeit von XML-Bibliotheken etc. loslegen.

                  Hä?
                  Und wie soll ich dann bitte mein Vorhaben machen?

                  Die Funktion PostToHost() hast du ja gekriegt.

                  Hast du dir die ganzen Posts durchgelesen?

                  Davon darfst du ausgehen.

                  Ich will nach abschicken des Formulars die Daten bearbeiten und in eine DB eintragen und anschließend alles weiter schicken zum nächsten _Server_ auf dem ein weiteres Skript ist, das diese Sachen wieder verarbeitet.

                  Und was kriegt der User zu sehen? Alle Aktivität geht schließlich vom Browser aus. Der schickt EINMAL und nur genau an EINEN SERVER einen Post-Request. Du hast also nur eine einzige Chance, diesen Request zu verarbeiten und an genau dieser einen Stelle muß alles damit passieren, was für dich erforderlich ist. Redirects, die den POST-Request wiederholen, funktionieren nach meinen Erkenntnissen nicht in allen Browsern, sind also wegen Unzuverlässigkeit nicht nutzbar.

                  - Sven Rautenberg

                  --
                  "Love your nation - respect the others."
                  1. Hi.

                    Und was kriegt der User zu sehen? Alle Aktivität geht schließlich vom Browser aus. Der schickt EINMAL und nur genau an EINEN SERVER einen Post-Request. Du hast also nur eine einzige Chance, diesen Request zu verarbeiten und an genau dieser einen Stelle muß alles damit passieren, was für dich erforderlich ist. Redirects, die den POST-Request wiederholen, funktionieren nach meinen Erkenntnissen nicht in allen Browsern, sind also wegen Unzuverlässigkeit nicht nutzbar.

                    Der User soll garnichts zu sehen kriegen.
                    Es geht darum das ich als Unternehmer mit eigenem Server und eigener Seite und eigenen Datenbanken bescheid bekomme wenn bei Amazon eine Bestellung bestätigt wird indem bei mir ein Skript aufgerufen wird welches die Bestelldaten der Bestellung von Amazon in meine Datenbank einträgt.

                    Ich brauche das Skript also für spätere Zusammenarbeit mit verschiedenen Shops wie Neckermann, Amazon, Ebay oder kleinere wie Atelco, Computer Universe oder ganz anderer Bereich wie The Body Shop.

                    1. Moin!

                      Und was kriegt der User zu sehen? Alle Aktivität geht schließlich vom Browser aus. Der schickt EINMAL und nur genau an EINEN SERVER einen Post-Request. Du hast also nur eine einzige Chance, diesen Request zu verarbeiten und an genau dieser einen Stelle muß alles damit passieren, was für dich erforderlich ist. Redirects, die den POST-Request wiederholen, funktionieren nach meinen Erkenntnissen nicht in allen Browsern, sind also wegen Unzuverlässigkeit nicht nutzbar.

                      Der User soll garnichts zu sehen kriegen.

                      Er muß aber irgendwas zu sehen kriegen, da er nach dem Abschicken des Formulars irgendeine Reaktion vom Server erwartet.

                      Es geht darum das ich als Unternehmer mit eigenem Server und eigener Seite und eigenen Datenbanken bescheid bekomme wenn bei Amazon eine Bestellung bestätigt wird indem bei mir ein Skript aufgerufen wird welches die Bestelldaten der Bestellung von Amazon in meine Datenbank einträgt.

                      Ich brauche das Skript also für spätere Zusammenarbeit mit verschiedenen Shops wie Neckermann, Amazon, Ebay oder kleinere wie Atelco, Computer Universe oder ganz anderer Bereich wie The Body Shop.

                      Da wirst du Pech haben. Wenn ein User bei Amazon (oder sonstwo) was bestellt, läuft dieser Prozess komplett auf der Amazon-Seite ab, auf die du keinerlei Einfluß nehmen kannst. Weder serverseitig noch clientseitig.

                      Du mußt darauf bauen, dass Amazon dich aus eigenem Antrieb irgendwie benachrichtigt, und dann diese Schnittstelle berücksichtigen. Hast du da schon mit Amazon gesprochen?

                      - Sven Rautenberg

                      --
                      "Love your nation - respect the others."
                      1. Hallo.

                        Er muß aber irgendwas zu sehen kriegen, da er nach dem Abschicken des Formulars irgendeine Reaktion vom Server erwartet.

                        Die Leute bestätigen die Bestellung indem sie bsp.-weise auf ein Formularbuttonklicken mit "Okay" .. dann wird das Skript aufgerufen. Und wenns fertig ist kriegt er die Meldung "Erfolgreich bestätigt" oder so ähnlich...

                        Da wirst du Pech haben. Wenn ein User bei Amazon (oder sonstwo) was bestellt, läuft dieser Prozess komplett auf der Amazon-Seite ab, auf die du keinerlei Einfluß nehmen kannst. Weder serverseitig noch clientseitig.

                        Das ist mir klar, aber wenn dann kooperieren wir ja mit den Shops und diese sollen dann diese von uns/mir erstellte Schnittstelle nutzen um uns bescheid zu geben.
                        Hätte also da jemand eine Idee wie man das am bestne löst?
                        Also ich hätte jetzt diese Funktion benutzt bzw eine Stream hergestellt und dann Daten übertragen.

                        Du mußt darauf bauen, dass Amazon dich aus eigenem Antrieb irgendwie benachrichtigt, und dann diese Schnittstelle berücksichtigen. Hast du da schon mit Amazon gesprochen?

                        Nein, aber wird noch wenn das Projekt steht,...

                        lg

                        Los Manas

                        1. Moin!

                          Er muß aber irgendwas zu sehen kriegen, da er nach dem Abschicken des Formulars irgendeine Reaktion vom Server erwartet.

                          Die Leute bestätigen die Bestellung indem sie bsp.-weise auf ein Formularbuttonklicken mit "Okay" .. dann wird das Skript aufgerufen. Und wenns fertig ist kriegt er die Meldung "Erfolgreich bestätigt" oder so ähnlich...

                          Auf wessen Server liegt diese Seite? Doch wohl bei Amazon. Also hast du sowohl auf das Aussehen des Formulars wie auch auf die Reaktion des Amazon-Servers keinerlei Einflußmöglichkeit. Mit anderen Worten: Dein Vorhaben ist nicht umsetzbar.

                          Da wirst du Pech haben. Wenn ein User bei Amazon (oder sonstwo) was bestellt, läuft dieser Prozess komplett auf der Amazon-Seite ab, auf die du keinerlei Einfluß nehmen kannst. Weder serverseitig noch clientseitig.

                          Das ist mir klar, aber wenn dann kooperieren wir ja mit den Shops und diese sollen dann diese von uns/mir erstellte Schnittstelle nutzen um uns bescheid zu geben.

                          Amazon wird niemals DEINE Schnittstelle einsetzen. Wenn, dann mußt du AMAZONS Schnittstelle einsetzen, sofern denn so eine existiert, wovon ich einfach mal ausgehen.

                          Das aber bedeutet: Wenn du außer mit Amazon noch mit einem anderen großen Shopanbieter kooperierst, dann wirst du dich auch auf DESSEN andere Schnittstelle einlassen müssen.

                          Ausschließlich dann, wenn du mit einem kleinen Shop kooperierst, der derzeit noch keinerlei Schnittstelle benutzt, hättest du die glückliche Situation, eine eigene Schnittstelle erstellen zu können - was allerdings blödsinnig ist, wenn vorher schon Amazons Schnittstelle programmiert ist, denn dann wäre es am einfachsten, einfach diese Schnittstelle dort einzupflanzen. Macht für dich weniger Arbeit, und hätte für den kooperierenden Shop den Vorteil, dass er eine recht verbreitete Schnittstelle nutzt, von denen nicht nur du, sondern auch andere Kooperationspartner profitieren würden, die ebenfalls amazon-kompatible Schnittstellensoftware einsetzen (könnten).

                          Hätte also da jemand eine Idee wie man das am bestne löst?
                          Also ich hätte jetzt diese Funktion benutzt bzw eine Stream hergestellt und dann Daten übertragen.

                          Es bringt dir nichts, jetzt auf der grünen Wiese irgendetwas zu realisieren, wenn du nicht 100% sicher bist, dass diese Arbeit dich in irgendeiner Weise für die endgültige Anwendung weiterbringt.

                          Wenn ich für Amazon eine Abfrageschnittstelle für eingetroffene Bestellungen für Shoppartner realisieren müßte, dann wäre das ein System, welches ein Framework benutzt, mit dem man sich authentifiziert und dann die entsprechenden Daten in irgendeinem netten Datenformat erhält. Als simpelste Form wäre das der Aufruf einer passenden URL, die HTTP-Authentifizierung erfordert und eine XML-Datei zurückliefert.

                          In diesem Workflow ist das Thema "Ich sorge dafür, dass die Kopie der Bestellung meinen Kooperationspartner erreicht" komplett unwichtig, denn Amazon wird dich nicht an seine internen Systeme heranlassen, damit du von dort aus die Kopie der Bestellung an dich abzweigst.

                          Deshalb noch einmal: Sprich mit Amazon (oder wem auch immer), kläre die Kooperation und dabei auch die technischen Details der Datenübermittlung.

                          Und ERST DANN überlegst du dir, was zur Realisierung dann zu tun ist.

                          - Sven Rautenberg

                          --
                          "Love your nation - respect the others."
                          1. Moin!

                            Auf wessen Server liegt diese Seite? Doch wohl bei Amazon. Also hast du sowohl auf das Aussehen des Formulars wie auch auf die Reaktion des Amazon-Servers keinerlei Einflußmöglichkeit. Mit anderen Worten: Dein Vorhaben ist nicht umsetzbar.

                            Ich gehe ja auch davon aus das sie dann an einer Stelle meine geschriebene Klasse die dann als API/Schnittstelle dient dort includen und ihr die Werte die ich dann haben will übergibt. Auch wenn das was naiv klingt gerade ^^..

                            Amazon wird niemals DEINE Schnittstelle einsetzen. Wenn, dann mußt du AMAZONS Schnittstelle einsetzen, sofern denn so eine existiert, wovon ich einfach mal ausgehen.

                            Schade., hmm könntest du Recht haben, nachvollziehbar isses jedenfalls. Aber was ist wenn ein Shop halt mal keine hat? Oder Amazon ihre nicht für andere Shop-Kooperationen zur Verfügung stellt?

                            Das aber bedeutet: Wenn du außer mit Amazon noch mit einem anderen großen Shopanbieter kooperierst, dann wirst du dich auch auf DESSEN andere Schnittstelle einlassen müssen.

                            Und dann für jeden einzelnen Shop mit eigener Schnittstelle ein extra Skript schreiben um die Daten zu verarbeiten?

                            Es bringt dir nichts, jetzt auf der grünen Wiese irgendetwas zu realisieren, wenn du nicht 100% sicher bist, dass diese Arbeit dich in irgendeiner Weise für die endgültige Anwendung weiterbringt.

                            Okay. Danke.

                            Wenn ich für Amazon eine Abfrageschnittstelle für eingetroffene Bestellungen für Shoppartner realisieren müßte, dann wäre das ein System, welches ein Framework benutzt, mit dem man sich authentifiziert und dann die entsprechenden Daten in irgendeinem netten Datenformat erhält. Als simpelste Form wäre das der Aufruf einer passenden URL, die HTTP-Authentifizierung erfordert und eine XML-Datei zurückliefert.

                            Was für ein Framework zum Beispiel?

                            Deshalb noch einmal: Sprich mit Amazon (oder wem auch immer), kläre die Kooperation und dabei auch die technischen Details der Datenübermittlung.

                            Und ERST DANN überlegst du dir, was zur Realisierung dann zu tun ist.

                            Okay so werd ich versuchen das anzugehen.

                            LG

                            Los Manas

                2. Hi los,

                  Und wie soll ich dann bitte mein Vorhaben machen?

                  Im ersten Script wie von mir gezeigt php://input einlesen und die so erhaltenen Daten als $data_to_send mit PostToHost() an den zweiten Server senden. Wäre vermutlich das einfachste in deinem Fall, dann müsstest du im zweiten PHP-Scripte alle Daten in $_POST drin haben, wie du sie auch im ersten Script hast.

                  Viele Grüße,
                    ~ Dennis.

              2. Hi Sven,

                ~~~xml

                <?xml version='1.0' standalone='yes' ?>

                <daten>
                    <variable name="foo">bar</variable>
                    <variable name="test">Some interesting stuff</variable>
                  </daten>

                
                >   
                > Man kann versuchen, es noch komplizierter zu machen, aber mir fallen da kaum noch Möglichkeiten ein.  
                  
                Ok, ich gebe zu, mein Beispiel war nicht ganz passend. ;-)  
                  
                Für eine wie oben exemplarisch genannten Datenstruktur eignet sich der herkömmliche Weg vermutlich deutlich besser. Allerdings wollte los manas noch Beispiele haben, folglich habe ich ein Beispiel genannt, welches so in der Praxis bei mir verwendet wird. Ich schrieb ja bereits, dass die Daten von einer Windows-Anwendung kommen, hierbei handelt es sich verständlicherweise nicht nur um so ein kurzes und simples XML wie oben genannt, sondern um eine eigene Datenstruktur, welche viele verschachtelte Informationen enthält, für bestimmte Daten noch Informationen über gesetzte Flags mitliefert und über den kompletten Input noch Metadaten enthält, welche z.B. die Sortierreihenfolge, Datum, Autor etc. festlegt.  
                Kurz um, eine solche Datenstruktur über variable[foo][bar][value]=wert&variable[foo][bar][value2]=hallo etc. festzulegen wäre ziemlich aufwendig, ein XML-Dokument ist da wesentlich einfacher und außerdem kann diese Art der Schnittstelle IHMO deutlich besser und verständlicher für andere Entwickler dokumentiert werden.  
                  
                  
                
                > Wäre die einfachste Methode, mit POST Daten von einem Server zum anderen zu schicken, nicht die Nutzung von Standard-Schnittstellen?  
                  
                In meinem Projekt ist dies eine "Standard"-Schnittstelle ;-) Zumal die Datenerhaltung auch in XML-Dokumenten im selben Format erfolgt.  
                  
                  
                
                > So wie Browser die Daten per POST an den Server schicken, ist es doch prima. Damit kann PHP direkt was anfangen, füllt ganz automatisch $\_POST, und der Programmierer kann ohne Zusatzarbeit und Abhängigkeit von XML-Bibliotheken etc. loslegen.  
                  
                Aber leider kennt ein C#.NET keine $\_POST Variable ;-) Meine Schnittstelle kann sowohl Daten entgegennehmen, als auch Daten herausgeben. Für XML gibt es in .NET und sicherlich jeder anderen Programmiersprache fertige Klassen, sodass man bequem ein XML-Dokument erstellen oder einlesen kann, während man sich den application/x-www-form-urlencoded String selber zusammenbasteln bzw. ihn parsen müsste.  
                  
                Kurz um, das war lediglich als Beispiel gedacht von mir, weil los manos danach fragte. Was für ihn nutzbar, komfortable und nicht zu kompliziert ist, muss er selber entscheiden.  
                  
                  
                Viele Grüße,  
                  ~ Dennis.
                
                -- 
                Mein [SelfCode](http://community.de.selfhtml.org/fanprojekte/selfcode.htm): [ie:{ fl:( br:> va:) ls:\[ fo:) rl:( n4:# ss:) de:\] js:| ch:{ sh:| mo:} zu:|](http://www.peter.in-berlin.de/projekte/selfcode/?code=ie%3A%7B+fl%3A%28+br%3A%3E+va%3A%29+ls%3A%5B+fo%3A%29+rl%3A%28+n4%3A%23+ss%3A%29+de%3A%5D+js%3A%7C+ch%3A%7B+sh%3A%7C+mo%3A%7D+zu%3A%7C)