Threading in PHP - Client muss auf Serverergebnis warten

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

  • Threading in PHP - Client muss auf Serverergebnis warten

    Hallo zusammen,

    im Rahmen der Erweiterung unseres aktuellen in PHP + MySQL entwickelten Projekts kommt es nun zu einem Schritt, der den Transfer von Daten vom Server zum Client und in einem weiteren Schritt den in umgekehrter Richtung erfordert.

    Kurze Ablaufbeschreibung am Bsp. des ersten Schritts, dem Transfer vom Server zum Client:
    • 1. User ruft Online-Skript auf
      2. Skript liest best. Daten aus Datenbank
      3. ausgelesene Daten sollen nun irgendwie automatisch (im Gegensatz zu "durch manuelles Zutun" wie z.B. manuelle FTP-Übertragung ) beim Client aufm Desktop landen
      4. Verarbeitung usw.


    Es geht also vor allem um Punkt 3.

    Auch dieser Teil soll natürlich in PHP realisiert werden.


    Wer hat Erfahrung auf dem Gebiet des automatischen Datentransfers zwischen Server und Client?
    Welche Transfer-Technik empfiehlt sich da (Protokoll bzw. PHP-Schnittstelle / -Bibliothek)?

    Gruß Michi

  • #2
    wenn es möglich wäre, "ohne zutun des clients" sachen auf seinem desktop abzulegen, wäre es eine riesige sicherheitslücke, oder? außerdem, woher soll php wissen, wo es was beim client ablegen soll?

    so auf die schnelle kann ich vorschlagen, daten vorzubereiten und in einer evtl. komprimierten datei zum download anzubieten. dann kann der user immer noch selbst entscheiden, wohin mit den daten.

    Kommentar


    • #3
      Hi penizillin,

      Original geschrieben von penizillin
      wenn es möglich wäre, "ohne zutun des clients" sachen auf seinem desktop abzulegen, wäre es eine riesige sicherheitslücke, oder? außerdem, woher soll php wissen, wo es was beim client ablegen soll?
      Unter Zutun versteh ich eben ausdrücklich manuelles Zutun wie Starten eines FTPs per Anwendung.

      Dass ein Server nicht ohne Weiteres Daten auf einem Client-Rechner abladen darf, ist mir soweit natürlich klar.

      Es wäre jedoch kein Problem, dass unter Passwortschutz z.B. vom Client-Rechner aus (!) eine Socket-Verbindung (Telnet?) aufgebaut wird, wobei der Telnet-Server dann das Skript startet und das Ergebnis liefert oder dass das Skript aufm Webserver (ebenfalls passwortgeschützt) vom Client aus gestartet wird, die Daten verarbeitet, ablegt und der Client sich diese dann per HTTP-Request (quasi automatischer Download) holt und diese danach gleich gelöscht werden.

      Aber das ist alles viel Aufwand, wenn man keine Basis hat.

      Gibts einfach einzubindende PHP-Bibliotheken, die sich solcher Transfer-Techniken über Standardprotokolle bedienen?

      (z.B. Funktionsaufruf $http_file_content = get_file ($url) oder so)

      Die Lösung der Ablage der Daten als potentiellen Download gefällt mir nicht so, weil eben alles automatisiert laufen soll - das ist mehr oder weniger so gefordert. Der User soll nur noch sein Skript starten und aufgrund der gezeigten Statistiken dann entscheiden müssen, ob er das Update durchführen will oder nicht, und den entsprechenden Link klicken. Damit soll seine Arbeit erledigt sein.

      Gruß Michi

      Kommentar


      • #4
        Ich würde es wie folgt Lösen:

        - Client postet auf eine URL
        - Server liest datenbank aus, bereitet die Daten auf und gibt sie in XML aus
        - Client parst XML
        - weitere Verarbeitung der Daten

        Ansonsten wäre es interessant, um was für Daten es sich handelt und was danach damit passieren soll.

        Kommentar


        • #5
          Hi Ueps,

          Original geschrieben von Ueps
          Ich würde es wie folgt Lösen:

          - Client postet auf eine URL
          - Server liest datenbank aus, bereitet die Daten auf und gibt sie in XML aus
          - Client parst XML
          - weitere Verarbeitung der Daten

          Ansonsten wäre es interessant, um was für Daten es sich handelt und was danach damit passieren soll.
          Ok, FTP, was ja in PHP längst unterstützt wird, ist schon nicht mal so ein ungelenkiges Protokoll, um die Daten auszutauschen, find ich.

          Bisher schwebt mir in etwa Folgendes vor:

          Client-Skript wird aufm localhost gestartet, dieses startet Skript aufm Server, Daten werden aus Datenbank gelesen, aufbereitet, in einen File geschrieben, den der Client dann per fget vom Server holt. Aufm localhost werden die Daten nun unter Einbindung eines Shell-Skripts (ob ich das noch hinbekomme, weiß ich jedoch nicht sicher - bisherige Versuche sind zumindest gescheitert) weiterverarbeitet, das Resultat via FTP wiederum auf den Server kopiert und dort über ein weiteres Server-Skript geparst und in die Datenbank geschrieben. So könnte es laufen. Größtes Problem, so wie ich das sehe, ist mittlerweile das Shell-Skript - eine .exe-Konsolen-Datei.

          Nun muss ich mal schauen, dass ich das hinbekomme, aber mit

          Code:
          $output = shell_exec ("http://localhost/.../shellskript.exe");
          echo $output;
          geht nur ganz geschwind die DOS-Box auf und ebenso geschwind wieder zu, ich krieg übers
          Code:
          echo $output
          jedoch keinen Output im HTML.

          XML wäre zwar schön, aber ob sich das noch mit vertretbarem Aufwand machen lässt, nachdem die meisten Verarbeitungs-Skripte bereits vor Monaten entwickelt wurden und jetzt eigentlich nur noch ein bisschen modifiziert werden sollen, um Flexibilität bei der Auswahl der Datenquelle zu schaffen usw. Im großen und ganzen wie so oft viel Gewurschtel, das zum Glück irgendwie funktioniert.

          Es handelt sich um Daten im AAF-Format, einem Format zum Speichern von astrologischen Datensätzen, von dem wir (in diesem Fall leider) ziemlich abhängig sind. Naja, aber das Format selbst ist nicht so das Problem, doch mehr der Transfer und die Verarbeitung, wobei der Aufruf der genannten DOS-.exe leider unumgänglich ist.

          Gruß Michi
          Zuletzt geändert von Gruselgockel; 27.12.2005, 17:42.

          Kommentar


          • #6
            shell_exec() funktioniert auch, also denk ich, bekomm ich es nun hin.

            Danke Euch schon mal!
            Michi

            Kommentar


            • #7
              Threading in PHP - Client muss auf Serverergebnis warten

              Hallo,

              es geht immer noch darum:
              http://www.php-resource.de/forum/sho...threadid=63802

              Das Problem das Datentransfers an sich ist nun gelöst.

              Das Client-Skript ruft das erste Server-Skript per include auf, welches dann diverse Prozesse ausführt, in denen die benötigten Daten zur Verfügung gestellt werden. Wenn das der Fall ist, soll sie sich der Client per FTP holen und weiterverarbeiten.
              Bis hierher mal.

              Die Initiative muss - wie im verlinkten Thread bereits erkannt - vom Client ausgehen. Während der Client das erste Server-Skript aufruft, das diverse Prozesse ausführt, muss das Client-Skript weiterhin im Hintergrund warten, bis der Server alle Daten fertig verarbeitet hat und diese dann per FTP abholen.

              In dem Moment, in dem das Client-Skript in Form des includes auf das erste Server-Skript abgeschlossen ist...:

              PHP-Code:
                  include ("http://<serverskriptname.php>"); // nun das Skript auf dem Server starten
                      
              ?> 
              ...verliert es allerdings auch die weitere Kontrolle über das Geschehen, was natürlich nicht der Fall sein darf. Sobald der Server die Daten fertighat, soll sie sich der Client wie gesagt per FTP holen.

              Wie programmiert man so ein Threading am besten in reinem PHP bzw. HTML unter Verzicht auf JavaScript, Framesets und mehrere Browserfenster?

              Am Liebsten wär mir schon so was wie ein Schleifen-Selbstaufruf, im Pseudo-Code:

              PHP-Code:
              while ( ! signal_gesetzt header ("location: <self> "); 
              , bis das erwartete Signal registriert werden kann, aber das funktioniert natürlich hier nicht ohne Weiteres.

              Welche Technik bietet PHP da?

              Gruß Michi

              Kommentar


              • #8
                Anmerkung

                kurzer Einschub:
                Habs nun mal mit Frameset und JavaScript gelöst.

                Funktioniert schon, ist jedoch einfach JavaScript und damit halt leider wieder browserabhängig.

                Wenn also jemand noch eine Idee hat, wie sich so ein Threading auch serverseitig in PHP lösen lässt, wär ich weiterhin daran interessiert.

                Kommentar


                • #9
                  Ich weiß nicht, aber wirklich sauber hört sich die Schnittstelle nicht an.

                  Kommentar

                  Lädt...
                  X