Ankündigung

Einklappen
Keine Ankündigung bisher.

Dateidownload bricht nach wenigen Minuten ab

Einklappen

Neue Werbung 2019

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

  • Dateidownload bricht nach wenigen Minuten ab

    Hallo,

    wir haben ein Downloadbereich für unsere Kunden. Das funktioniert soweit auch gannz gut. Allerdings bricht bei größeren Dateien der Download immer nach ca. 5-6 Minuten ab. Bei kleineren Dateien, wo der Download nicht so lange dauert, funktioniert das.

    Ich habe schon ein speicherschonendes Script - von daher kann ich mir jetzt nicht erklären, wieso das dann doch immer nicht funktioniert. Vielleicht gibt es noch irgendwelche Begrenzungen, von denen ich nichts weiß!?

    Vielen Dank im Voraus!

    Hier mein Script:

    PHP-Code:
    function downloadLargeFile($filepath){
        
    //check if file exists
        
    if(file_exists($filepath)){
            
    //File found
            
    $filename explode(DIRECTORY_SEPARATOR$filepath);
            
    $filename $filename[count($filename)-1];
            
    header("Content-type: application/octet-stream");
            
    header("Content-Disposition: attachment; filename=\"".$filename."\"");
            
    header("Content-length: ".filesize($filepath));
            
    header("Cache-control: private");
            return 
    readfile_chunked($filepath);
        } else {
            
    //File not found
            
    return false;
        }
    }

    function 
    readfile_chunked ($filename) {
        
    $chunksize 1*(1024*1024); // how many bytes per chunk
        
    $buffer '';
        
    $handle fopen($filename'rb');
        if (
    $handle === false) {
            return 
    false;
        }
        while (!
    feof($handle)) {
            
    $buffer fread($handle$chunksize);
            print 
    $buffer;
            
    ob_flush();
            
    flush();
        }
        return 
    fclose($handle);
    }

    set_time_limit(0);    
    downloadLargeFile($Datei); 

  • #2
    - Error Reporting hochdrehen
    - Datei nach Abbruch auf Fehlermeldungen am Dateiende prüfen
    - HTTP Status code prüfen
    - Ggf. Error Log des Servers prüfen
    - PHP Einstellungen prüfen (Safemode muss aus sein z.B.)

    Kommentar


    • #3
      Hilft dir das weiter?
      http://www.php.net/manual/de/functio...file.php#81032

      Das hier scheinst du auch noch nicht zu kennen:
      http://de.php.net/basename

      Kommentar


      • #4
        @Chriz
        ob_flush() hab ich ja drin im script... :/
        und basename() ist sehr gut. danke

        @Dark Guardian
        es wird keine fehlermeldung ausgegeben am dateiende. safemode ist aus. error log ist ausgeschaltet - da könnte ich mal gucken, wie man das anschaltet. hab ich noch nie gemacht...

        btw: ich hatte mal den support angeschrieben und da kam ne mail zurück "ja, ich bin kein programmierer aber vllt hat das was mit dem session timeout zu tun"?! hab ich mal nachgeschaut, aber das ist auch auf 30 minuten gesetzt und hat ja auch nicht wirklich was damit zu tun denk ich...

        hmm...

        Kommentar


        • #5
          max execution time vom apache fcgi handler ?

          Kommentar


          • #6
            Zitat von tr0y Beitrag anzeigen
            max execution time vom apache fcgi handler ?
            uh, das waren aber viele fremdwörter für mich
            die max execution time kann man doch per set_time_limit() ändern (was ich ja auch gemacht habe) oder sehe ich das falsch?

            Kommentar


            • #7
              http://httpd.apache.org/docs/current...e.html#timeout

              Kommentar


              • #8
                Also ich downloade gerade mit memory_limit = 8M und einer max_execution_time = 10 eine 2,1 GB Datei (zugegeben lokal), es gibt überhaupt keine Probleme. Weder mit deinem noch mit meinem Skriptschnipsel.

                PHP-Code:
                <?php
                set_time_limit
                (0);
                error_reporting(E_ALL E_STRICT);
                ini_set("display_errors"1);


                function 
                downloadFile($file)
                {
                    
                header("Content-Type: application/octet-stream"true);
                    
                header("Content-Disposition: attachment; filename=\"".$file."\"");
                    
                readfile($file);
                }

                function 
                downloadFileSplit($file)
                {
                    
                header("Content-Type: application/octet-stream"true);
                    
                header("Content-Disposition: attachment; filename=\"".$file."\"");

                    
                $chunksize 1*(1024*1024); // how many bytes per chunk
                    
                $buffer '';
                    
                $handle fopen($file'rb');
                    if (
                $handle === false) {
                        return 
                false;
                    }
                    while (!
                feof($handle)) {
                        
                $buffer fread($handle$chunksize);
                        print 
                $buffer;
                        
                ob_flush();
                        
                flush();
                    }
                    return 
                fclose($handle);
                }
                #phpinfo(); exit;

                downloadFileSplit("D:/xampp.7z");
                Wobei deins scheinbar schneller läuft

                Lass die Content-Length mal weg, die ist irreführend, vor allem wenn implizite Komprimierung mit im Spiel ist.

                Kommentar


                • #9
                  @Chriz

                  gerade getestet und der bricht wieder bei ca. 5 minuten ab sehr eigenartig....

                  aber vielleicht liegt es an dieser TimeOut-Direktive von @tr0y. Hab ich das richtig gelesen, dass das nur der Hoster ändern kann?

                  Kommentar

                  Lädt...
                  X