PHP header Problem

Alanger

Grünschnabel
Servus, hi.. .

Ich hab da ein.. vielleicht winziges Problem.

Hab mich ein kleinen wenig mit 'header' beschäftigt und komm da nicht wirklich weiter trotz Suche.
Bin gerade dabei ein kleines Downloadscript zu schreiben das via header application ermöglichen soll ALLE Dateien herunterladen zu können.
Code:
<?php
$filename = "test";
$endung  = "txt";

header("Content-type: application/$endung");
header("Content-Disposition: attachment; filename=".$filename.".".$endung."");
readfile("$filename.$endung");
?>

Der Download funktioniert gut, allerdings steht eben in dieser text.txt dann das was in der DL Seite im headerbereicht steht.
Code:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" href="style.css">
<title>Temporary Downloadfile</title>

Woran könnte das liegen bzw. was müsste man ändern ?
 
Schließ die Verarbeitung des Skripts nach der Ausgabe des Inhalts am besten direkt ab:
PHP:
$filename = "test";
$endung  = "txt";

header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=".$filename.".".$endung."");
readfile("$filename.$endung");
exit;
 
mhh.. würde ich gerne machen wenn das Downloaden net über nen Link Funktionieren würde.

Code:
 echo "   <a href=\"dl.php?action=dlnow\">$filename.$endung</a>\n";

Code:
if ($action == "dlnow") {
 header("Content-type: application/$endung");
 header("Content-Disposition: attachment; filename=".$filename.".".$endung."");
 readfile("$filename.$endung");
 exit;
}

Das ding ist, das bei der obigen variante der DL nichtmal startet.. .
 
PHP:
echo "   <a href=\"dl.php?action=dlnow\">$filename.$endung</a>\n";

Bei einem solchen Link übergibst du ja auch weder $filename noch $endung wodurch dein nachfolgendes Skript überhaupt nicht weiß, was es runterladen soll.

Am besten übergibst du diese per Formular oder URL und greifst dann auf die entsprechenden Werte zu.
 
Also das komplette Script:

Code:
<?php
ob_start();
$filename = "test";
$endung = "mp3";

$action = $_REQUEST['action'];
if ($action == "dlnow") {
 header("Content-type: application/$endung");
 header("Content-Disposition: attachment; filename=".$filename.".".$endung."");
 readfile("$filename.$endung");
 exit;
}
echo "   <a href=\"dl.php?action=dlnow\">$filename.$endung</a>\n";
?>

Ich hab mich da jetzt noch ein wenig weiter umgeschaut aber ich konnte keine andere variante finden bzw. werd nicht schlau was da falsch sein könnte.
 
Also das von dir genannte Skript funktioniert ohne Probleme bei mir.

Statt $_REQUEST[] nutze lieber direkt $_GET da du weißt, woher die Daten kommen (nämlich aus der URL).


Ansonsten könnte die Erhöhung von [phpf]error_reporting[/phpf] auf E_ALL mögliche Fehlerquellen anzeigen, wobei das eher unwahrscheinlich ist.
 
Hmm.. ok...

Kann sowas vielleicht auch an der Konfiguration des Servers liegen ?

Also ich danke dir erstmal für die Hilfe
 
Ah, halt. Ich sollte aufmerksamer lesen.

Um einen Download zu erzwingen, nimmt man nie die Endung application/mp3 sondern application/octet-stream.

Versuch es mal damit.
 
mhh.. Sorry, ich glaub irgendwas stimmt da immernoch nicht..

Mal klappt der Download, mal wieder nicht.
Also die Datei ist z.B. 3MB gross und manchmal lädt er nur 2KB herunter und bricht wieder ab.

Code:
<?php
$datei = "test.mp3";

$action = $_GET['action'];
if ($action == "dlnow") {
 $datei = $_GET['file'];
 header("Content-type: application/octet-stream");
 header("Content-Disposition: attachment; filename=".$datei."");
 readfile("".$datei."");
 exit();
}
?>
<a href="dl.php?action=dlnow">Download</a>


Ich werd daraus echt nicht schlau warum das so ist.
 
Zurück