Datei Download

@Dimenson: Ich hab Deinen Beitrag mal ins Lummerland gejagt da der hier irgendwie total unpassend und voll daneben war. Aber ich kann Dich schon verstehen. ;)
 
Gut, ich werde dann mal etwas aus dem Ärmel schütteln:
PHP:
<?php

	$_options = array(
		'SOURCE_DIR'              => '/foo/bar/',
		'ALLOWED_REQUEST_METHODS' => array('GET', 'POST', 'HEAD')
	);


	// Validierung der Anfrage-Methode
	if( !in_array($_SERER['REQUEST_METHOD'], $_options['ALLOWED_REQUEST_METHODS']) ) {
		header($_SERVER['SERVER_PROTOCOL'].' 405 Method Not Allowed', true);
		echo 'Method Not Allowed';
		exit;
	}

	// Validierung des ID-Parameters
	if( !isset($_GET['id']) || empty($_GET['id']) || intval($_GET['id']) != $_GET['id'] || $_GET['id'] <= 0 ) {
		header($_SERVER['SERVER_PROTOCOL'].' 400 Bad Request', true);
		echo 'Bad Request; ID Argument Is Missing';
		exit;
	}

	$query = '
		SELECT
		        …
		  FROM
		        …
		  WHERE
		        `id` = "'.$_GET['id'].'"
		';
	$result = mysql_query($query);

	// Prüfung auf Existenz eines Datensatzes mit beschriebenen Kriterien
	if( mysql_num_rows($result) <= 0 ) {
		// bei Misserfolg wird der Nicht-gefunden-Status gesendet
		header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found', true);
		echo 'Requested Ressource Not Found';
		exit;
	} else {
		// bei Erfolg wird die Datei ausgeliefert
		$row = mysql_fetch_array($result, MYSQL_ASSOC);
		header('Content-Type: application/octet-stream', true);
		header('Content-Disposition: attachment; filename="'.$row['filename'].'"');
		readfile($_options['SOURCE_DIR'].$row['filename']);
		exit;
	}

?>
Dieses Beispiel läuft nun unter Angabe der ID des Datensatzes. Es ist jedoch auch möglich, die ID durch den Dateinamen auszutauschen. Auch ist ist nun möglich, weitere Sicherheitsvorkehrungen wie etwa eine Benutzer-Authentifizierung oder Ähnliches einzubinden. Allgemein sollten die herunterzuladenden Dateien außerhalb des von Außen zugänglichen Bereichs liegen, um die Sicherheit vor unerlaubten Zugriffen zu erhöhen.
 
Zurück