Ankündigung

Einklappen
Keine Ankündigung bisher.

Download einer Datei von Fremd-Server

Einklappen

Neue Werbung 2019

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

  • Download einer Datei von Fremd-Server

    Hallo!

    Hab hier neulich schonmal gepostet bzgl. Datei-Download. Mir wurde die readfile_chunked()-Funktion angeboten, und die funktioniert auch tadellos.

    Ich hab nun aber ein Problem - die Funktion funktioniert nur dann, wenn sich die Datei auf dem selben Server befindet. Wenn ich als Download-URL eine komplett andere Adresse angebe, läuft das ganze nicht.

    Wichtig: Ich hab bei der Download-URL auch das "http://" mit angegeben, und ich hab mein Skript so geschrieben, daß die URL letztendlich korrekt ist (eigentlich wird im Beispiel die URL zusammengesetzt aus Download-Ordner und Filename, das wird bei mir aber im Falle eines vorhandenen "http://" nicht gemacht). Hab mir den Download-Link dann auch mal per echo ausgeben lassen, der ist absolut korrekt.

    Geht das generell nicht mit anderen Servern? Oder mach ich doch irgendwas falsch?

    Was mir noch aufgefallen ist: es steht unten in meiner Statusleiste trotzdem dran: "sende Anfrage an localhost" und nicht etwa der Server, auf dem sich die Datei befindet...

    Schöne Grüße und vielen Dank
    ZeHa


  • #2
    Hat wirklich keiner 'ne Idee?

    Kommentar


    • #3
      was willst du überhaupt machen? Kenne deinen anderen Thread nicht!

      Kommentar


      • #4
        Im Grunde geht es darum, daß man sich bei meinem Skript einloggen kann um sich Dateien runterzuladen. Das funktioniert auch bisher tadellos, da ich eben die readfile_chunked()-Funktion benutze (vorher wurden Dateien ab 'ner bestimmten Größe oder Zeit einfach abgebrochen).

        Nun funktioniert alles, der User loggt sich ein und klickt 'nen Link an, der ihm dann die Datei serviert. Und zwar so, daß er den eigentlichen Datei-Link nicht mitkriegt.

        Das Problem ist jetzt nur, daß es eben nicht funktioniert, wenn sich die Datei auf 'nem anderen Server befindet wie das php-Skript. Das will ich aber hinkriegen, da ich viel Webspace habe mit viel Traffic, wo aber kein php-Skript läuft. Somit muß das Skript auf 'nen anderen Space, und von dort muß es dann zugreifen auf den großen Webspace. Aber das klappt irgendwie nicht...

        Kommentar


        • #5
          Hallo,

          kannst du denn mit anderen Funktionen (fopen() etc.) Dateien auf anderen Servern öffnen.
          Wenn das auch nicht geht, ist vermutlich die Option allow_url_fopen in der php.ini ausgeschaltet.

          Viele Grüße,
          karl-150

          Kommentar


          • #6
            Danke für den Tip! Hab aber nachgeschaut, und es war überall "On". Also kann es daran nicht liegen...

            Mann wieso geht das nicht....

            Kommentar


            • #7
              Natürlich wird die Anfrage nicht von vem Browser an den Fremderver gesendet. Die Datei wird ja von PHP includet (also serverseitig, davon merkst du im Browser gar nix)

              Wenn bei dir das läuft (wenn nicht :wink: , dann viel Spaß ):
              PHP-Code:
              <?php
              $fp 
              fopen('http://www.phpfriend.de','rb');
              while (!
              feof($fp)) echo fread($fp1);
              fclose($fp);
              ?>
              Dann sollte es das auch tun:
              PHP-Code:
              <?php
              function readfile_chunked(...) {
                ...
              }
              readfile_chunked('http://www.phpfriend.de');
              ?>

              Kommentar


              • #8
                Leider ging auch das nur halb. Beim ersten Fall wurde die Seite geöffnet, aber ohne daß auf Sachen wie Stylesheet oder so Rücksicht genommen wurde. Sah also alles sehr komisch aus.

                Beim zweiten ging es nicht, sprich es kam überhaupt nix (außer einer leeren Seite).

                Aber ich kann euch ja mal zeigen, was dann letztendlich IN der Datei drinsteht, die mir das Skript übergibt (wenn ich die von mir gewünschte Datei öffnen will):

                Warning: filesize() [function.filesize]: stat failed for <<<pfad der zieldatei>>> in download.php on line 102

                Kommentar


                • #9
                  du kannst über http kein filesize verwenden, würdest du die version von php.net [da hab ich die nachgesehen, und die tuts auch] benutzen, hättest du das problem nicht
                  dass die stylesheets nicht richtig angezeigt werden ist doch klar, wenn die seite mit relativen pfaden arbeitet

                  /edit: sry, ab php5 schon

                  Kommentar


                  • #10
                    Wenn ich die Filesize-Funktion weglasse, geht's aber auch nicht richtig. Es kommt zwar letztendlich die Datei an, aber wie es scheint, liest er erstmal alles in den Cache und frägt DANN erst, ob man nun öffnen oder speichern will. Nun ist der Download bereits beendet, die Datei wird dann auch korrekt abgespeichert, aber es ist ja blöd wenn der User evtl. minutenlang warten muß, bis der Browser endlich mal sagt, was Sache ist...

                    Das Skript sollte halt so funktionieren, daß jeder User die Datei downloaden kann, also sollte alles auch schön reibungslos ablaufen wie auf anderen Download-Seiten auch. Momentan fällt mir als Lösung eben nur ein, das alles auf einem einzigen Server zu machen, aber da weiß ich noch nicht, ob ich das so hinkriege (nicht vom Programmieren her)...

                    Hast Du evtl noch 'ne Idee?

                    Kommentar


                    • #11
                      mit readfile_chunked() sollte es aber möglich sein, dass der Download sofort gestartet wird, ich habe das mal bei mir mit der version von php.net versucht, der download startet auch sofort, der einzige nachteil ist, das beim herunterladen dann unbekannte dateigröße steht.
                      hier mal ein beispiel für einen mpeg download:

                      PHP-Code:
                      <?php
                      function readfile_chunked($filename,$retbytes=true) {
                         
                      $chunksize 1*(1024); // how many bytes per chunk
                         
                      $buffer '';
                         
                      $cnt =0;
                         
                      // $handle = fopen($filename, 'rb');
                         
                      $handle fopen($filename'rb');
                         if (
                      $handle === false) {
                             return 
                      false;
                         }
                         while (!
                      feof($handle)) {
                             
                      $buffer fread($handle$chunksize);
                             echo 
                      $buffer;
                             
                      flush();
                             if (
                      $retbytes) {
                                 
                      $cnt += strlen($buffer);
                             }
                         }
                             
                      $status fclose($handle);
                         if (
                      $retbytes && $status) {
                             return 
                      $cnt// return num. bytes delivered like readfile() does.
                         
                      }
                         return 
                      $status;

                      }
                      header('Content-type: video/mpeg');
                      readfile_chunked('http://www.mpg.de/bilderBerichteDokumente/multimedial/filmeWissenschaft/2004/11/atmosphaerenforschung/film.mpg');
                      ?>
                      /*edit: auch ein normales readfile() sollte bewirken, dass beim Benutzer sofort "Öffnen" erscheint, readfile gibt die gelesenen daten ja direkt aus

                      Kommentar


                      • #12
                        Das ist jetzt echt komisch, denn ich hab grad mal Dein Skript probiert - auch hier dauert es ewig lang bis was kommt.

                        Ist es denn möglich, daß es auch drauf ankommt, auf welchem Server das PHP-Skript läuft? Also daß z.B. die Servereinstellungen auf manchen PHP-Servern einfach so ungünstig sind, daß es so abläuft wie bei mir?

                        Kommentar

                        Lädt...
                        X