Probleme mit octet-stream

Moritz123

Erfahrenes Mitglied
Hallo!

ich habe mir eben mal einen kleinen Dateibrowser in PHP getrickt und will diesen nun mit einem Download-Script verbinden, dass dann automatisch den Download-Dialog öffnet.
Ich habe das ganze so realisiert:
PHP:
header("Content-type: application/octet-stream");
header("Content-Disposition: filename=$_GET[verzeichnis]/$_GET[datei]");

Leider will er dann statt der datei die übergeben wird, das downloadscript (download.php) herunterladen.
Wie ist das zu verhindern?


Vielen dank und einen schönen Sonntag Abend!
 
Hm... ich glaube dass man den Dateinamen beim Content-Disposition-Header in Anführungszeichen setzen muss... außerdem: Wieso verwendest du eine Pfadangabe im Dateinamen?
 
das download-script liegt auf der root-ebene; will ich aber eine Datei aus dem Verzeichnis /xy/z herunterladen, muss ich das doch mit übergeben, da das downloadscript sonst denkt die datei liegt ebenfalls auf der root-ebene.
Das mit den Anführungszeichen gibt eine Parse-Error:
Parse error: parse error, unexpected T_VARIABLE in c:\appserv\www\download.php
 
Na ja, Anführungszeichen müssen natürlich escaped werden...

Und der Dateiname, den du im Header sendest, hat nichts mit dem Dateinamen bzw. dem Pfad auf dem Server zu tun... Wo du deine Daten herholst kann dem Client doch egal sein ;)
 
Wie, das kann dem client egal sein?

Wie soll er denn eine Datei laden, die es in diesem Ordner gar nicht gibt?
Das versteh ich nicht...selbst wenn das so wäre wie du das sagst, warum produziert er dann leere dateien?
 
Ach... kann es sein, dass du meinst man muss nur ein paar Header senden und damit ist es getan? Das wär ja noch schöner ;) Du musst die Datei natürlich auch ausgeben, z.B. mit readfile().
 
alles was ich will, ist, dass die datei nicht geöffnet wird, sondern einfach nur der downloaddialog aufgeht und man die datei speichern kann. ist das so falsch ?
 
ok, habs kapiert.
Vielen Dank!

ich hätte da aber noch ne frage zu meinem ,,Explorer'':

Und zwar funktioniert dieser lokal wunderbar - aber sobald ich ihn hochlade geht er nicht mehr:
Warning: OpenDir: Permission denied (errno 13) in /www/htdocs/abieinsd/explorer.php on line 15

Warning: readdir(): supplied argument is not a valid Directory resource in /www/htdocs/abieinsd/explorer.php on line 22

Warning: closedir(): supplied argument is not a valid Directory resource in /www/htdocs/abieinsd/explorer.php on line 56

Hier der Code:
PHP:
<?php
if (! isset ($verzeichnisname))
$verzeichnisname = "C:/Appserv/www";
$verzeichnis = opendir($verzeichnisname);  <<<< ZEILE 15

		echo "<tr>";
		echo "<td width=5%><-</td>";
		echo "<td width=70%><a href=$PHP_SELF>Root</a></td>";
		echo "<td width=26%>//</td>";
		echo "</tr>";
while($eintrag = readdir($verzeichnis))    <<<< ZEILE 22
{
	$test = $verzeichnisname . "/" . $eintrag;
        if (is_dir($test))
	{
		echo "<tr>";
		echo "<td width=5%>Dir</td>";
		echo "<td width=70%><a href=$PHP_SELF?verzeichnisname=$test>$eintrag</a></td>";
		echo "<td width=26%>//</td>";
		echo "</tr>";
        }
	else
	{
		echo "<tr>";
		echo "<td width=5%>File</td>";
		echo "<td width=70%><a href=download.php?datei=$verzeichnisname/$eintrag>$eintrag</a></td>";
		$groesse = filesize($eintrag);
		if ($groesse > 1024){
			$groesse = round($groesse/1024,2);
			echo "<td width=25%>$groesse KB</td>";
		}
		
		else {
			echo "<td width=25%>$groesse Byte</td>";
		}
		
		echo "</tr>";
	}
}
		echo "<tr>";
		echo "<td width=5%><-</td>";
		echo "<td width=70%><a href=$PHP_SELF>Root</a></td>";
		echo "<td width=26%>//</td>";
		echo "</tr>";
closedir($verzeichnis);                 <<<< ZEILE 56
?>

Wo liegt hier der Fehler?


Vielen Dank nochmal!
 
Hm, also ich hoffe mal dass du die Zeile 14 entsprechend der Webserverumgebung abgeändert hast... ansonsten kann ich da auf die Schnelle keinen Fehler entdecken.
 
Zurück