Ankündigung

Einklappen
Keine Ankündigung bisher.

JS (jq) xhr() stream? Bzw. den Fortschritt ermitteln/ausgeben?

Einklappen

Neue Werbung 2019

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

  • JS (jq) xhr() stream? Bzw. den Fortschritt ermitteln/ausgeben?

    Hallo Forum,

    vorweg, cross-origi ist kein Thema, das klappt bisher alles!
    Wie muss ein entsprechender xhr-Request aussehen wenn der Status des laufenden php-skripts zurück gegeben werden soll?
    Http ist ja ein Anfrage -> Antwort Protokoll aber z.B. bei einem Dateiupload wird es ja mehr oder weniger zu einem stream gewandelt, so das der Fortschritt im selbigen Request ausgegeben werden kann.

    Da ich dies oder ähnliches bisher nicht brauchte, habe ich da keine Erfahrung mit. Nun bräuchte ich es aber.
    Sinn und Zweck ist das ich mit einer xhr-Anfrage einen Datei-Versand veranlassen möchte.

    Beispiel:
    Der Webserver (A) sendet den xhr an server B dieser führt ein php-curl Skript aus und sendet eine Datei zu Server C und dessen Fortschritt muss zum Webserver (A) gelangen.

    Hier muss in JS doch sicher irgend welche Sachen definiert werden um den Status zu Empfangen (und wie Ruft man diesen ab)?

    Also das PHP- Skript auf Server B sollte denke ich mal in etwa so aussehen (snippet):
    PHP-Code:
    function PostToHost($host$port$path$postdata$filedata) {
         
    $data "";
         
    $boundary "---------------------".substr(md5(rand(0,32000)),0,10);
         
    $fp fsockopen($host$port);

         
    fputs($fp"POST $path HTTP/1.0\n");
         
    fputs($fp"Host: $host\n");
         
    fputs($fp"Content-type: multipart/form-data; boundary=".$boundary."\n");

         
    // Ab dieser Stelle sammeln wir erstmal alle Daten in einem String
         // Sammeln der POST Daten
         
    foreach($postdata as $key => $val){
             
    $data .= "--$boundary\n";
             
    $data .= "Content-Disposition: form-data; name="".$key.""\n\n".$val."\n";
         }
         
    $data .= "--$boundary\n";

         
    // Sammeln der FILE Daten
         
    $data .= "Content-Disposition: form-data; name="{$filedata[0]}"; filename="{$filedata[1]}"\n";
         
    $data .= "Content-Type: image/jpeg\n";
         
    $data .= "Content-Transfer-Encoding: binary\n\n";
         
    $data .= $filedata[2]."\n";
         
    $data .= "--$boundary--\n";

         
    // Senden aller Informationen
         
    fputs($fp"Content-length: ".strlen($data)."\n\n");
         
    fputs($fp$data);

         
    // Auslesen der Antwort
         
    while(!feof($fp)) {
             
    $res .= fread($fp1);
         }
         
    fclose($fp);

         return 
    $res;
    }

    $postdata = array('var1'=>'test''var2'=>'test');
    $data file_get_contents('Signatur.jpg');
    $filedata = array('inputname''filename.jpg'$data);

    echo 
    PostToHost ("localhost"80"/test3.php"$postdata$filedata); 
    Denke das sollte schon mal der richtige Ansatz sein, aber wie ich den JS-Part gestalten muss ist mir schleierhaft =(

    MfG: Paykoman
    PS: Guten Rutsch ins neue Jahr.

  • #2
    Zitat von Paykoman Beitrag anzeigen
    Wie muss ein entsprechender xhr-Request aussehen wenn der Status des laufenden php-skripts zurück gegeben werden soll?
    Sowas geht nicht. PHP gibts was aus und Ende. Wenn Du nen Upload mit Statusanzeige haben willst nimm eine der zahlreichen fertigen Lösungen.

    Nur mit PHP z.B. so: http://php.net/manual/de/session.upload-progress.php

    Kommentar


    • #3
      Nein es geht hier leider nicht um den Upload, steht ja aber auch im Beispiel.

      Die Datei existiert bereits auf Server B und soll auf Server C verschoben werden. Der Initiator ist dabei der Server A, welcher dann auch den Fortschritt benötigt um den Prozess dem User ersichtlich zu machen.

      Es kann natürlich sein das Server A auf Server B eine JS Datei ansprechen muss, so das diese JS Datei einen Upload an Server C durchführt, dann wäre es ja eigentlich möglich den Status weiter zu reichen. Die Validierung und Sicherheits-Sachen wären dann wiederum schwerer.

      ::EDIT:: wie sieht es aus wenn die Webseite ein NODE.js Server hat, könnte man das damit iwie umsetzten?

      Kommentar


      • #4
        Die Datei existiert bereits auf Server B und soll auf Server C verschoben werden. Der Initiator ist dabei der Server A, welcher dann auch den Fortschritt benötigt um den Prozess dem User ersichtlich zu machen.
        Wenn Du eine Datei von X nach Y cpoierst ist es egal, wer das anstösst.
        Wie Du richtig erkannt hast, benötigt X den Status der gesendeten oder von Y als angenommen bestätigten Bytes.

        Woran habert das jetzt genau siehe #2 ?

        Kommentar


        • #5
          So hatte gerade den letzten Testlauf und hab es nun umgesetzt, daher vielen Dank an die wundervoll gute Hilfe.

          Kommentar

          Lädt...
          X