Probleme mit PHP-Dateidownload und session

dwex

Erfahrenes Mitglied
Hallo,

ich habe ein kleines Problem und komme nicht drauf was es sein kann.

Ich habe folgendes Script:
PHP:
<?php
session_start();

if (!session_is_registered('user'))
{
echo "Für diesen Dateidownload sind Sie nicht berechtigt oder Sie sind nicht eingeloggt";
} else {

// $download sei der Bezeichner für die zu ladende Datei

// Dieses Verzeichnis liegt außerhalb der Document_Root und
// ist nicht per URL zuzugreifen.
$basedir = "/srv/www/htdocs/serv87/download";
include("filelist.php");

// Einbruchsversuch abfangen.
if ($filelist[$download] == "")
  die("Datei $download nicht vorhanden.");

// Vertrauenswürdigen Dateinamen basteln.
$filename = sprintf("%s/%s", $basedir, $filelist[$download]);

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

// Passenden Dateinamen im Download-Requester vorgeben,
// z.B. den Original-Dateinamen
$save_as_name = basename($filelist[$download]);
header("Content-Disposition: attachment; filename=\"".$save_as_name."\"");

// Datei ausgeben.
readfile($filename);
}
?>

Wenn ich nun den Dateidownload starte bekomme ich auch die Datei welche in der Filelist steht zum Download angeboten - wenn ich mir diese Datei dann NICHT speichere und stattdessen gleich öffne (z.B. eine Zip-Datei) dann ist die Datei leer.
Wenn ich die Datei auf meiner Festplatte speichere dann kann ich Sie öffnen und die Daten sind da.

Wenn ich nun die ganze Geschichte mit der Session aus dem Script rauslasse dann funktioniert es.
Das sieht dann so aus:
PHP:
<?php
// $download sei der Bezeichner für die zu ladende Datei

// Dieses Verzeichnis liegt außerhalb der Document_Root und
// ist nicht per URL zuzugreifen.
$basedir = "/srv/www/htdocs/serv87/download";
include("filelist.php");

// Einbruchsversuch abfangen.
if ($filelist[$download] == "")
  die("Datei $download nicht vorhanden.");

// Vertrauenswürdigen Dateinamen basteln.
$filename = sprintf("%s/%s", $basedir, $filelist[$download]);

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

// Passenden Dateinamen im Download-Requester vorgeben,
// z.B. den Original-Dateinamen
$save_as_name = basename($filelist[$download]);
header("Content-Disposition: attachment; filename=\"".$save_as_name."\"");

// Datei ausgeben.
readfile($filename);

?>

ERGÄNZUNG:
Ich habe soeben festgestellt, das dieses Problem offensichtlich nur im IE auftritt - mit dem Netscape funktioniert alles bestens.
Ausserdem ist mir noch aufgefallen, dass (wieder nur beim IE) mir das Script (download.php?download=file1) zum download angeboten wird wenn ich zwar eingeloggt bin aber die URL über den Browser eingebe (und nicht über einen Link auf meiner Seite) - Es wird dann aber nichts heruntergeladen weil ich eine Fehlermeldung bekomme das die Datei nicht exisitert.

Was mache ich falsch - wer kann helfen?
Vielen Dank im voraus!
 
Zuletzt bearbeitet:
Zurück