Download-Problem

Nabi

Erfahrenes Mitglied
Hi, Diesem php-Code erzeugt eine auswahlliste , Man Wählt ein Datei aus , Um zu öffnen oder Speichern, Es handelt sich um zip Dateien , wenn ich versuche die Datei zu öffnen
bekomme folgendes Fehler " Der ZIP-komprimierte Ordner ist
ungültig oder beschädigt" , bei direkte Mausklick öffnet
sich die Datei ganz Normal, Nur mit hilfe dieses Code funktioniert nicht
, was könnte Falsch sein?
Danke in Voraus.

PHP:
<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Test</title>
</head>
<body>
<form method="get" action="<?php echo $PHP_SELF ?>">  
<select name="download" >
<option>file</option>
<option>file2</option>
<option>file3</option>
</select>
<input type="submit" name="submit" value="sumbit">
</form>
<?php
// $download sei Bezeichner für die zu ladende datei
if (isset($_GET['download'])){
$download=$_GET['download'];

// Dioeses Verzeichnis liegt außerhalb des Document Root und
// ist nicht per URL erreichbar.
$basedir="home/www/download";

// Übersetzung von Download-Bezeichner in Dateinamen.
$dateiliste=array(
"file"=> "area1/datei1.zip",
"file2"=>"area1/datei2.zip",
"file3"=>"area2/datei1.zip"
);

// Einbruchsversuch abfragen.
if (!isset($dateiliste[$download])) die ("Datei $download nicht 
vorhanden.");

// Vertrauenswürdigen datei erzeugen.
$datei=sprintf("%s/%s", $basedir, $dateiliste[$download]);

// Passenden Dateitype erzeugen
header("Content-Type: application/octet-stream");

// Passende Dateiname im Download-Requester vorgeben,
// z.b. den Original - Dateinamen
$speicher_name = basename($dateiliste[$download]);
header("Content-Disposition: attachment; filename=\"$speicher_name\"");

// Datei ausgeben.
readfile($datei);
};
?>
</body>
</html>
 
Zuletzt bearbeitet:
Probier mal Folgendes:
PHP:
<?php

	if( isset($_GET['download']) ) {
		$basedir = 'home/www/download';
		$dateiliste = array(
			'file'  => 'area1/datei1.zip',
			'file2' => 'area1/datei2.zip',
			'file3' => 'area2/datei1.zip'
		);

		if( !isset($dateiliste[$_GET['download']]) || !file_exists($basedir.'/'.$dateiliste[$_GET['download']]) ) {
			header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found');
			die('Die angeforderte Datei konnte nicht gefunden werden.');
		}
		$abspath = $basedir.'/'.$dateiliste[$_GET['download']];
		header('Content-Type: application/octet-stream');
		header('Content-Disposition: attachment; filename="'.addslashes(basename($abspath)).'"');
		readfile($abspath);
		exit;
	}

?>
<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
	<title>Test</title> 
</head> 

<body> 
<form method="get" action="<?php echo $_SERVER['PHP_SELF']; ?>">
	<select name="download">
		<option>file</option>
		<option>file2</option>
		<option>file3</option>
	</select>
	<input type="submit" name="submit" value="sumbit">
</form>
</body>
</html>
 
Immer noch lassen sich die Dateien Nicht öffnen sondern:

"Der ZIP-komprimierte Ordner ist
ungültig oder beschädigt"
 
Das problem ist gelöst mit einer kleine änderung , Das code sieht ähnlich zu dem
von Gumbo vorgeschlagen beispiel.

PHP:
<?php
// $download sei Bezeichner für die zu ladende datei
if (isset($_GET['download'])){
$download=$_GET['download'];

// Dioeses Verzeichnis liegt außerhalb des Document Root und
// ist nicht per URL erreichbar.
$basedir="home/www/download";

// Übersetzung von Download-Bezeichner in Dateinamen.
$dateiliste=array(
"file"=> "area1/jdosaobj.zip",
"file2"=>"area1/datei2.txt",
"file3"=>"area2/datei1.txt"
);

// Einbruchsversuch abfragen.
if (!isset($dateiliste[$download])) die ("Datei $download nicht 
vorhanden.");

// Vertrauenswürdigen datei erzeugen.
$datei=sprintf("%s/%s", $basedir, $dateiliste[$download]);

// Passenden Dateitype erzeugen
header("Content-Type: application/octet-stream");

// Passende Dateiname im Download-Requester vorgeben,
// z.b. den Original - Dateinamen
$speicher_name = basename($dateiliste[$download]);
header("Content-Disposition: attachment; filename=\"$speicher_name\"");

// Datei ausgeben.
readfile($datei);
exit;
};
?>
<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Test</title>
</head>
<body>
<form method="get" action="<?php echo $PHP_SELF ?>">  
<select name="download" >
<option>file</option>
<option>file2</option>
<option>file3</option>
</select>
<input type="submit" name="submit" value="sumbit">
</form>
</body>
</html>
 
Die Sache hat mit der datei selbst zu tun , Nicht mit php, Manche zip dateien lassen sich
öffnen manche nicht .
Worin besteht denn die kleine Änderung?
dein Code wird laufen wenn ich: || !file_exists($basedir.'/'.$dateiliste[$_GET['download']])
entferne , weil ich an diese stelle immer fehler 404 Not Found bekomme.
 
Zurück