Dateiübergabe an Browser mittels header(); funktioniert nicht korrekt

qsrs

Erfahrenes Mitglied
Hallo,

ich lade per PHP-Skript eine Datei herunter und übergebe die Daten mittels header(); an den Browser. Das mache ich folgendermaßen:

PHP:
header ("Content-Type: application/x-zip-compressed;");
  header ("Content-Disposition: attachment; filename=\"".$array3[name].".zip\";");
  readfile ("files/temp/".$filename_output.".zip");

Die Datei wird heruntergeladen, auch hat sie eine korrekte Größe. Ich kann sie jedoch nicht entpacken. Es kommt die Meldung, dass die Datei korrupt ist. Mit WinAce kann ich sie zwar entpacken, aber wahrscheinlich übergeht das Programm eventuelle Fehler. Was mache ich mit der header-Funktion falsch?

Wenn ich die Datei auf dem Server per FTP herunterlade, ist alles in Ordnung.
 
Versuche mal den Header passend zu einem Download auszugeben:

PHP:
header('Content-Type: application/octet-stream', true);

Und noch den für die Dateigröße:

PHP:
header('Content-Length: '.filesize("files/temp/".$filename_output.".zip"));
 
Zuletzt bearbeitet:
Danke für deine Antwort. Leider hat es nichts geholfen. Ich verstehe wirklich nicht, was ich hier falsch mache. Es sind davon auch alle Browser betroffen.
 
Also es erscheint keine Fehlermeldung im Browser, die Datei wird heruntergeladen, die Größe ist auch in Ordnung. Nur entpacken kann ich sie nicht. Ich bekomme die Meldung, dass die ZIP-Datei ungültig bzw. korrupt ist.
 
Durch den Inhaltstyp beziehungsweise den Dispositionstyp werden sämtliche Ausgaben als Datei an den Client geschickt. Also auch mögliche Fehlermeldungen und mögliche Leerraumzeichen, die vielleicht vor oder nach dem PHP-Block stehen. Deshalb sollte der PHP-Block das Erste in der Skriptdatei sein und eine weitere mögliche Ausgaben nach der readfile()-Funktion mittels exit; verhindert werden.
 
Zurück