Zum Inhalt springen

Problem bei Dateidownload (.zip) bei Typo3-Extension

Erstellt am 26. Juli 2009 · 3 Antworten · letzte Antwort am 26. Juli 2009

Tags: PHP, Frage

teddy86 ·

Moin,

ich habe eine Extension geschrieben, welche eine Datei zum Download anbietet, die per get-String an die Extension übergeben wird:

if($_GET['load']){
  if(file_exists($inputPath."doku/".$_GET['load'])) $dir="doku";
  if(file_exists($inputPath."inst/".$_GET['load'])) $dir="inst";
  if(file_exists($inputPath."res/".$_GET['load'])) $dir="res";
  
  header("Content-Type: application/octet-stream");
  header("Content-Disposition: attachment; filename=\"".$_GET['load']."\"");
  readfile($inputPath.$dir."/".$_GET['load']);
}

dies funktioniert auch bestens, nur bei manchen zip-Dateien fehlt das Ende der Datei (z.B. 31 von 32 mb geladen), sodass die datei nach dem download beschädigt ist. das problem tritt nicht bei allen .zip dateien auf, .rar macht eigentlich überhaupt keine probleme..

woran könnte dies liegen? wieß jemand rat?!

vielen dank
ted

teddy86 ·

Nachtrag:

Rufe ich die Datei direkt über den Pfad fileadmin/dateien/.../dateiname.zip auf, wird diese auch zum download angeboten und es erscheint x mb von 33mb heruntergeladen und die datei funktioniert nach dem download. über das skript erscheint "restdauer unbekannt" und der download ist nur etwa halb so schnell.

kann das problem evtl bei einer serverseitig begrenzten scriptlaufzeit liegen? aber eigentlich läuft doch im hintergrund kein script mehr. sobald das skript die datei an den browser übergeben hat ist das script doch beendet oder?

gruß
ted

teddy86 ·

also, eine skriptlaufzeit spielt hier keine rolle. die datei wird komplett heruntergeladen. problem: die datei ist 32,98 mb groß, nach dem download über das skript ist sie aber 33,05 mb groß. wo kommt denn jetzt bloß dieser überhang her und vor allem, wie krieg ich den weg?! :o

ThBodi ·

Vermutlich ist der Überhang HTML-Code, der von TYPO3 nach den von Dir geposteten Zeilen generiert und an den Browser geschickt wird. Je nachdem, wie die Extension an der Stelle eingebunden ist, kann das sein. Setze ein "exit;" nach readfile();, damit sollte es dann funktionieren, nicht ganz so sauber, wie es sein sollte, aber naja.

Übrigens ist Dein Skript potentiell gefährlich:

Schon mal darüber nachgedacht, was passiert, wenn ein Parameter der Art "...&load=../../typo3conf/localconf.php" übergeben wird? Das willst Du doch bestimmt nicht, oder?