• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

PHP Datei Download per readfile(); erzeugt komische Ausgabe

maria1

Mitglied
Hey alle zusammen,

Ich habe ein Problem mit einem meiner bestehenden Projekte.

Das Vorhaben:
Per Header und readfile(); den Download einer Datei erzwingen/starten.
Versteht mich nicht falsch, ich weiß "Anfangslektüre", dennoch komme ich bei diesem Bug nicht so recht weiter...

Das Problem:
readfile(); erzeugt eine merkwürdige Ausgabe die ich mir nicht ganz erklären kann.

Der Code:
Code:
if (isset($_POST["download"])) {
$filename = "http://utubeload.tk/alpha_v.1.0/cache/$filename";
$filesize = filesize($filename);
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename='$filename'");
header("Content-Length: $filesize");
header("Cache-Control: no-cache, must-revalidate");
@readfile($filename);
}

Dazu muss ich sagen das ich den Code nun extra simpel aufgebaut habe für das Debugging...

Die Ausgabe im Browser:
Code:
[COLOR=#000000][FONT=Arial]ID3TSSE Lavf52.93.0���d�i � 4�LAME3.98.4UUUUUUUUUUUUUUU[/FONT][/COLOR]
Dies wiederhohlt sich eine Weile und danach kommt etwas anderes unverständliches....
Der ganzen Output kann ich hier nicht posten.
Hier könnt Ihr euch das ganze selbst ansehen, einfach auf den Download Button klicken.

Irgendwie wird die Datei über den Browser gestreamt aber warum?
 
Werbung:
Woher kommt in deinem Quellcode denn $filename ?

Wenn man auf Download klickt kommt eine Datei mit dem Content-type text/html inkl. dem ganzen HTML-Rahmengerüst zurück. Ich würde sagen Du hast deine index.php falsch aufgebaut, denn wenn Du o.g. Download-Code ausführen lassen willst, dann musst Du jegliche andere Ausgaben unterdrücken/weglassen.
 
$filename kommt per $_POST, ist aber alles okay, der Pfad stimmt!

Oh danke das ergibt sinn...
Ich realisiere derzeit provisorisch eine Umleitung per PHP per header...
Es wird geprüft welche Domain aufgerufen wird und ggf. wird per header weitergeleitet.
Diese Abfrage passiert immer...
Ich verstehe schon, die "header" kommen sich in die quere.

Könnte man den Download anders lösen?
Dennoch ist es etwas merkwürdig, auch wenn ich die erste Weiterleitung lösche, habe ich das selbe Problem dennoch.
Die Weiterleitung ist wie gesagt raus...

So sah Sie aus:
Code:
$request_url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$referer = $_SERVER['HTTP_REFERER'];


//if utubeload requested
if ($request_url == 'http://utubeload.tk/') { header ('Location: /alpha_v.1.0/');}


//if swap.it requested
if ($referer == 'http://swap-it.tk/') { header ('Location: /xxxx/');}

Das dies das Problem verursacht verstehe ich schon, aber jetzt wo die Weiterleitung nicht mehr aktiv ist müsste es doch funktionieren...

Sorry für meinen "schrottigen" Schreibstil bin am Tablet unterwegs.
 
Werbung:
Nein, eine Weiterleitung würde zu einer Weiterleitung führen - sprich: das was man eigentlich ausgeliefert bekommt müsste etwas völlig anderes sein. Die Weiterleitung greift hier also nicht. Du hast allerdings immernoch den HTML-Code in der Ausgabe bevor Du die eigentliche Datei ausgibst.

Ich würde empfehlen den Download über eine extra Datei zu machen. download.php z.B. Die könnte dann wirklich nur den Quellcode zum Download enthalten.
 
Zurück
Oben