readfile() öffnet nur einen stream gleichzeitig

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

  • readfile() öffnet nur einen stream gleichzeitig

    Hallo Leute,

    ich habe ein massives Problem mit readfile und einem gepushten Download von einer Webseite. Auf der Website selbst wird ein Zipfile generiert - von Java - das u.U. 100 MB groß sein kann. Dieses soll runtergeladen werden, indem ich es folgendermaßen pushe:

    PHP-Code:
    $filename=$basedir."/".$daszip;
    header("Content-Type: application/zip");
    header("Content-Disposition: attachment;filename=\"Zip.zip\";");
    header("Content-Transfer-Encoding: binary");
    readfile($filename); 
    Funktioniert auch alles wunderbar, nur kann ich während der Download läuft NICHTS weiter machen auf der Seite. D.h. ich kann keine Links anklicken, keinen weiteren Download starten - nichts.
    Ist das ein normales Verhalten? Konnte online nichts darüber finden. Es bringt mich noch zur Verzweiflung.
    Der User wird schön blöd gucken, wenn er die 5 Minuten oder so in denen das File lädt nichts anderes machen kann.

    Hat jemand sowas schon einmal machen "dürfen"?

    Gr33tz, Aki

    PS: Ich habe auch andere Content Types und andere Header-infos ausprobiert - immer mit dem selben Resultat. Die Seite macht zu solang der Download laeuft.

  • #2
    Re: readfile() öffnet nur einen stream gleichzeitig

    Wundert dich das, bei 100MB ...?

    Was macht denn readfile()? Zitat Manual:
    Liest den Inhalt einer Datei und schreibt ihn in den Ausgabepuffer.
    Da ist dein Server also erst mal ganz schön beschäftigt. Er muss ja die Datei oder zumindest große Teile von ihr über lange Zeit im Speicher halten - schließlich geht der Transfer über das Internet an den Client nicht allzu fix bei so einer Datenmenge. Also hat dein Server für ziemlich lange Zeit ziemlich wenig Speicher für sonstiges zur Verfügung.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      hm.. danke für die Antwort...
      Ich glaube nicht, dass es daran liegt, denn das selbe Phänomen habe ich, wenn das File nur 10 MB groß ist auch.

      Wenn ich mit Mozilla runterlade und parallel im IE auf der Seite surfe, geht das auch. Also muss es etwas mit dem offenen Stream im herunterladenden Browser zu tun haben.

      Kommentar


      • #4
        Man könnte mein Problem eigentlich auf eine einfache Frage runterbrechen.

        [COLOR=crimson]Ist es möglich einen Download mit readfile() am laufen zu haben und parallel noch einen anderen zu starten oder weiter auf die Seite zuzugreifen? [/COLOR]

        Und wenn ja - was könnte die Konstante sein, die mich davon abhält selbiges auf meiner Seite zu tun?
        Irgendwelche Limitierungen von PHP oder Apache?

        Kommentar


        • #5
          Ist es möglich einen Download mit readfile() am laufen zu haben und parallel noch einen anderen zu starten oder weiter auf die Seite zuzugreifen?
          natürlich

          benutzt du sessions? dann hilft dir folgende zeile bevor du den download startest:
          PHP-Code:
          session_write_close(); 

          Kommentar


          • #6
            btw:

            Was macht denn readfile()?

            Zitat Manual:
            Liest den Inhalt einer Datei und schreibt ihn in den Ausgabepuffer.
            .. ich benutze inzwischen anstelle von readfile() folgendes:

            PHP-Code:
               ## Datei ausgeben.
               
            $chunksize 1*(1024*1024); // bytes per chunk
               
            $buffer '';
               
            $handle fopen($file'rb');
               if (
            $handle === false) {
               
            //error
               
            }
               while (!
            feof($handle)) {
               
            $buffer fread($handle$chunksize);
               echo 
            $buffer;
               }
               
            fclose($handle); 

            Kommentar


            • #7
              Original geschrieben von akiea
              Und wenn ja - was könnte die Konstante sein, die mich davon abhält selbiges auf meiner Seite zu tun?
              Irgendwelche Limitierungen von PHP oder Apache?
              Vielleicht eher eine Browsereinstellung - wenn du sagst, DL mit dem einen und surfen mit dem anderen ginge nach wie vor parallel ...
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                ow mann crisdoe... darf ich dich drücken und küssen? Wo soll ich die Belohnung hinüberweisen!?
                Das mit der Session war DIE Lösung - vielen Dank!!! Ich hab schon gedacht ich muss noch einen Tag mit Testen verbringen. Du bist ein Schatz!!
                Jetzt gehen auch mehrere Downloads gleichzeitig - ich glaub ich hab schon ein paar graue Haare bekommen von dem Mist!

                Ich glaube
                [COLOR=crimson]session_write_close();[/COLOR] ist auch die Lösung für die Weltformel!!

                Kommentar


                • #9
                  ich glaub ich hab schon ein paar graue Haare bekommen von dem Mist!
                  ... und ich erst

                  Kommentar

                  Lädt...
                  X