Fehler im Download-Script

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

  • Fehler im Download-Script

    Servus zusammen,

    irgendwie läuft mein Download-Script noch nicht einwandfrei.
    Bei den runtergeladenen Dateien scheint etwas am Ende nicht mitgesendet zu werden.
    Wenn ich nämlich eine runtergeladene .rar öffne, kommt folgende Fehlermeldung: "Unerwartetes Archivende".
    Wenn ich aber die Datei ohne dem Script, also per Pfadeingabe, lade, funktioniert alles.

    Hier mein Script:

    PHP-Code:
    $download_file basename($local_file);

    // set the download rate limit
    $download_rate 130.0// (=> 100,0 kb/s)
    if(file_exists($local_file) && is_file($local_file))
    {
        
    $extension strtolower(substr(strrchr($local_file"."), 1));
        
    // Determine correct MIME type
        
    switch($extension){
            case 
    "asf":     $type "video/x-ms-asf";                break;
            case 
    "avi":     $type "video/x-msvideo";               break;
            case 
    "exe":     $type "application/octet-stream";      break;
            case 
    "mov":     $type "video/quicktime";               break;
            case 
    "mp3":     $type "audio/mpeg";                    break;
            case 
    "mpg":     $type "video/mpeg";                    break;
            case 
    "mpeg":    $type "video/mpeg";                    break;
            case 
    "rar":     $type "encoding/x-compress";           break;
            case 
    "txt":     $type "text/plain";                    break;
            case 
    "wav":     $type "audio/wav";                     break;
            case 
    "wma":     $type "audio/x-ms-wma";                break;
            case 
    "wmv":     $type "video/x-ms-wmv";                break;
            case 
    "zip":     $type "application/x-zip-compressed";  break;
            default:        
    $type "application/force-download";    break;
        }
        
    header('Cache-control: private');
        
    header('Content-Type: '.$type);
        
    header('Content-Length: '.filesize($local_file));
        
    header('Content-Disposition: attachment; filename='.$download_file);

        
    flush();
        
    $file fopen($local_file"rb");
        while(!
    feof($file))
        {
            
    // send the current file part to the browser
            
    print fread($fileround($download_rate 1024));
            
    // flush the content to the browser
            
    ob_flush();
            
    flush();
            
    // sleep one second
            
    sleep(1);
        }
        
    fclose($file);



    Würde mich sehr über Hilfe freuen. :-)

    Mit freundlichen Grüßen
    Chrono

  • #2
    mach statt deiner schleife einfach readfile() und danach direkt exit;
    Slava
    bituniverse.com

    Kommentar


    • #3
      Das Problem bei readfile() ist halt, dass ich die Download-Rate nicht beschränken kann und das wär mir schon wichtig.

      Gibt es vielleicht noch eine andere Lösung?

      Kommentar


      • #4
        Klar!
        Es gibt ein Modul für den Inianer, dem du das Problem überlassen könntest...
        Wir werden alle sterben

        Kommentar


        • #5
          Wie meinst du das?

          Kommentar


          • #6
            Mit fread sollte das genausogut gehen.
            Ersetze einmal
            PHP-Code:
                flush();
                
            $file fopen($local_file"rb");
                while(!
            feof($file))
                {
                    
            // send the current file part to the browser
                    
            print fread($fileround($download_rate 1024));
                    
            // flush the content to the browser
                    
            ob_flush();
                    
            flush();
                    
            // sleep one second
                    
            sleep(1);
                }
                
            fclose($file); 
            durch

            PHP-Code:
                $file fopen($local_file"rb");
                while(!
            feof($file)){
                    
            // send the current file part to the browser
                    
            print fread($file10240); // nur vorübergehend
                    // flush the content to the browser
                    
            flush();
                    
            ob_flush();
                    
            // sleep 1/10 sec
                    
            usleep(100000);
                }
                
            fclose($file); 
            Dann ersetze auch noch dein Content-Disposition durch
            PHP-Code:
            header("Content-Disposition: attachment; filename=\"" $download_file"\""); 

            Kommentar


            • #7
              Danke für deine Hilfe!
              Hab die Änderungen mal vorgenommen, aber die Downloads sind immer noch fehlerhaft.

              Gibt es eigentlich einen Grund, warum du "flush()" und "ob_flush()" vertauscht hast?

              Kommentar


              • #8
                Sind denn alle DL fehlerhaft oder nur ein tar-DL? Mal eine andere Datei probiert? Die Header die im Browser ankommen hast du z.B. mittels LiveHeader Ext für FF geprüft? Passiert der Fehler mit allen Browsern oder nur mit einem bestimmten (z.B. IE)?
                Normalerweise sollte dies
                PHP-Code:
                header('Content-transfer-encoding: binary'); 
                bei einem DL auch angegeben werden (natürlich nur wenn es wirklich binäre Daten sind)

                Gruss

                tobi
                Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                Kommentar


                • #9
                  Also ich hab jetzt noch eine .zip und eine .png mitm FF, IE7 und dem IE6 getestet, immer fehlerhaft!

                  Die Header scheinen laut LiveHeader zu stimmen, also kommen dort richtig an.

                  Wann genau sollte ich denn noch angeben, dass es binäre Daten sind?
                  Im Prinzip sind doch alle Dateien binär?!

                  Gruß
                  Chrono

                  Kommentar

                  Lädt...
                  X