forced Downloads?

firstlord18

Erfahrenes Mitglied
Hallo,

wenn man auf einen Link klickt, welcher auf ein Bild verweißt, wir das ja häufig im Browser geöffnet. So wird es auch bei einigen anderen Dokumenten gemacht.

Ist es möglich, das zu unterdrücken, sodass ein Fenster zum Download der Datei kommt?

Falls ja, wie?

Danke im voRaus
 
öhm, sry, aber damit bin ich irgendwie überfordert :\

Also soll ich einfach nur so machen:

Ein Link:
download.php?file=file.jpg

und die download.php:

PHP:
if(file_exists($_GET["file"])) {
  Content-Disposition: attachment; filename=$_GET["file"];
  die();
}
 
Hm, ok, wahrscheinlich mit Header(). Aber irgendwie bekomme ihc das nicht so hin. Also irgern dwie weiß ich einfach nicht, was ich amchen soll. Kannst du mir nicht noch etwas helfen? Danke!
 
Folgendes wäre möglich:
PHP:
<?php

	$file = ( isset($_GET['file']) && basename($_GET['file']) != '' )
		? '/path/'.basename($_GET['file'])
		: null;

	// es wurde keine Datei angegeben
	if( is_null($file) ) {
		header('HTTP/1.1 406 Not Acceptable', true);
		exit;
	}

	// die angegebene Datei existiert nicht
	if( !file_exists($file) || !is_file($file) ) {
		header('HTTP/1.1 404 Not Found', true);
		exit;
	}

	// die angegebene Datei kann nicht gelesen werden
	if( !is_readable($file) ) {
		header('HTTP/1.1 500 Internal Server Error', true);
		exit;
	}

	// Angabe zusätzlicher Header-Felder
	$headerFields = array(
		'Content-Type'        => 'application/octet-stream',
		'Content-Disposition' => 'attachment; filename="'.basename($file).'"',
		'Content-Length'      => filesize($file)
	);
	foreach( $headerFields as $key => $value ) {
		header($key.': '.$value);
	}
	// Ausgabe des eigentlichen Dateiinhalts
	readfile($file);
	exit;

?>
 
ok danke, ich werde das mal testen ;)

hm, wie ist es aber nun, wenn man einen ganzen Pfad angibt? Der wird ja durch das basename() weggekürzt, also das Script nichtmehr, oder?
 
Zuletzt bearbeitet:
Die Angabe eines Pfades ist dahin gehend unsicher, da dadurch auch auf nicht erlaubte Dateien zugegriffen werden kann. Daher sollten sich alle Dateien, die zum Herunterladen angeboten werden, in einem eigenen Verzeichnis befinden – am besten noch ein von „Außen“ nicht zugängliches.
 
hm stimmt, aber wenn das nicht möglich ist? bzw wenn sich die dateien in einem extra unterverzeichnis empfinden? dann müsste ich ja auch den pfad angeben!?
also wie würde sowas aussehen? einfach bei readfile noch den pfad davor? danke!
 
Zurück