Force Download: Browser gibt immer index.php zurück

ahykes

Erfahrenes Mitglied
Hallo Leutz,

so versuche ich einen Download zu forcen:

PHP:
			if($_GET['dowlfile']){	
				$fp = $_GET['dowlfile'];
				$file = basename($fp); 
				header("Content-type: application/force-download"); 
				header("Content-Disposition: attachment; filename=\"".$file."\""); 
				header("Content-Length: ".filesize($fp)); 
				readfile($fp); 
			}
Das klappt auch fast. Die heruntergeladene Datei heißt so wie die Datei die ich laden wollte. Aber der Inhalt der Datei ist der der index.php Wie kann das denn sein?:eek:
Aufgerufen wird das Script duch:

"http://53.43.134.33/listing/index.php?dowlfile=C:/Program Files/xampp/htdocs/OI-Sicherung.zip&dir=C:/Program Files/xampp/htdocs"
 
Ich weiss es wirklich nicht. Einfach so ein paar Debug sachen.

Gib mal for readfile() $fp aus und schau was drinsteht. Einfach schauen ob es nicht irgendwo anderst überschrieben/editiert wird.

Liefrt filesize($fp) ein Resultat zurück. Also findet es das File? Versuche sonst mal mit file_exists() abzufragen ob das File existiert.

Und sonst versuch mal im Pfad anstat '/', '\' zu verwenden. Finde es aber strange, dass es nicht funktioniert. Habe gerade letztens auch einen Filedownload gemacht auf einem Windowsrechner. Hat mit Slashes wunderbar funktioniert....

Gruss
X

Edit:
Habe was auf http://ch2.php.net/readfile gefunden:
PHP:
Instead of using
<?php
header('Content-Type: application/force-download');
?>
use
<?php
header('Content-Type: application/octet-stream');
?>
Some browsers have troubles with force-download.
 
Zuletzt bearbeitet:
Du solltest noch prüfen, ob die angeforderte Datei überhaupt existiert und sie zu der Menge der erlaubten Dateien gehört. Denn sonst kann ja jede beliebige Datei heruntergeladen werden.
 
Es ja so: Der Aufruf, den ich vorhin gepostet habe, stammt von einem Directorie-Indexing. Dort wird jede Datei als Link wie oben ausgegeben. Daher existiert diese Datei also auf jeden Fall!
 
Sorry, dass hatte ich auch schon probiert. Ich habe aber den Fehler gefunden. *iefehler* :-) Und zwar habe ich den obigen Code nicht in eine getfile.php gepackt und dann per "<a href=getfile.php?file=alex.txt"> aufgrufen auman!

;-] Jetzt gehts!

Inhalt der getfile.php:
PHP:
	if($_GET[fp]){
	$fp = $_GET[fp];
	$file = basename($fp); 
	header("Content-type: application/force-download"); 
	header("Content-Disposition: attachment; filename=\"".$file."\""); 
	header("Content-Length: ".filesize($fp)); 
	readfile($fp); 
	}
 
ahykes hat gesagt.:
Es ja so: Der Aufruf […] stammt von einem Directorie-Indexing. Dort wird jede Datei als Link wie oben ausgegeben. Daher existiert diese Datei also auf jeden Fall!
Wenn aber den Inhalt der „index.php“ ausgegeben wird, läuft irgendetwas falsch.
Ich meinte auch, dass du den Wert, der schlussendlich der readfile()-Funktion übergeben wird, prüfen solltest.
 
Zurück