Problem mit Download per Header

kastalonien

Mitglied
Ich möchte auf meiner Seite einen Download per Header ausführen und habe dazu folgendes Script geschrieben:

PHP:
 if (isset($file))
  {
   header('Content-Description: File Transfer');
   header('Content-Type: application/force-download');
   header('Content-Length: ' . filesize($filename));
   header('Content-Disposition: attachment; filename=' . basename($file));

   readfile($file);
 
   $result = mysql_query("SELECT USER_DOWNLOAD FROM KCU_USER WHERE USER_LOGIN = \"".$_SESSION['login']."\" AND USER_PASS = \"".$_SESSION['pass']."\";");
   $row = mysql_fetch_assoc($result);
   $USER_DOWNLOAD = $row['USER_DOWNLOAD'];
   
   if (!strstr($row['USER_DOWNLOAD'], basename($file)))
    {
     $USER_DOWNLOAD = $USER_DOWNLOAD.basename($file)." (".date("d.m.Y")."), ";
     mysql_query("UPDATE KCU_USER SET USER_DOWNLOAD = '$USER_DOWNLOAD' WHERE USER_LOGIN = \"".$_SESSION['login']."\" AND USER_PASS = \"".$_SESSION['pass']."\";");
    }

  }

das Problem ist jetzt nur, dass der nicht die entsprechende Datei, sondern immer die download.php runterladen möchte...wo ist das Problem...

Danke für Hilfe

Kastalonien
 
Der korrekte Header Wert für einen Download ist application/octet-stream.

Woher kommt $filename und $file? Haben sie die richtigen Inhalte?

Noch etwas...
Nach [phpf]readfile[/phpf] darf keinerlei Ausgabe des Skriptes mehr kommen, da er das sonst an die Ausgabe anhängt... Also erledige lieber alles VOR [phpf]readfile[/phpf] und beende dann das Skript... Z. B. mit [phpf]exit[/phpf].
 
Zuletzt bearbeitet:
Probier mal Folgendes:
PHP:
header('Content-Type: application/octet-stream');
header('Content-Length: '.filesize($file));
header('Content-Disposition: attachment; filename="'.addslashes(basename($file)).'"');
readfile($file);
 
Also ich hab's nochmal verändert und jetzt gibt's nen anderes Problem...

hab' den Code jetzt mal in ne Extra Datei geschrieben...
PHP:
<?

 header('Content-Type: application/octet-stream');
 header('Content-Length: '.filesize($file));
 header('Content-Disposition: attachment; filename="'.addslashes(basename($file)).'"');

 include "mysql_connect.php";
 error_reporting(E_ALL);

 $result = mysql_query("SELECT USER_DOWNLOAD FROM KCU_USER WHERE USER_LOGIN = \"".$_SESSION['login']."\" AND USER_PASS = \"".$_SESSION['pass']."\";");
 $row = mysql_fetch_assoc($result);
 $USER_DOWNLOAD = $row['USER_DOWNLOAD'];
   
 if (!strstr($row['USER_DOWNLOAD'], basename($file)))
  {
   $USER_DOWNLOAD = $USER_DOWNLOAD.basename($file)." (".date("d.m.Y")."), ";
   mysql_query("UPDATE KCU_USER SET USER_DOWNLOAD = '$USER_DOWNLOAD' WHERE USER_LOGIN = \"".$_SESSION['login']."\" AND USER_PASS = \"".$_SESSION['pass']."\";");
  }

 readfile($file);

?>

jetzt funktioniert zwar der download, doch die Dateien sind fehlerhaft. Das winrar (es sind .rar-Dateien) gibt als Fehlermeldung "....Unerwartetes Archivende" aus...:confused:
 
PHP:
<?

 header('Content-Type: application/octet-stream');
 header('Content-Length: '.filesize($file));
 header('Content-Disposition: attachment; filename="'.addslashes(basename($file)).'"');

 include "mysql_connect.php";
 error_reporting(E_ALL);

 $result = mysql_query("SELECT USER_DOWNLOAD FROM KCU_USER WHERE USER_LOGIN = \"".$_SESSION['login']."\" AND USER_PASS = \"".$_SESSION['pass']."\";");
 $row = mysql_fetch_assoc($result);
 $USER_DOWNLOAD = $row['USER_DOWNLOAD'];
   
 if (!strstr($row['USER_DOWNLOAD'], basename($file)))
  {
   $USER_DOWNLOAD = $USER_DOWNLOAD.basename($file)." (".date("d.m.Y")."), ";
   mysql_query("UPDATE KCU_USER SET USER_DOWNLOAD = '$USER_DOWNLOAD' WHERE USER_LOGIN = \"".$_SESSION['login']."\" AND USER_PASS = \"".$_SESSION['pass']."\";");
  }

 readfile($file);
 exit;
?>

Zum Testen bietet sich eine kleine .txt Datei an, um gewisse Fehler leichter erkennen zu können.
 
Jo der Tip mit der txt-Datei war echt gut...da standen dann alle Fehler drin...also es funktioniert jetzt...

nur hab' ich jetzt nen sehr spezielles Problem, was nur den IE betrifft...

ich kann, wenn ich ich das download-script ausführe, nicht mehr im gleichen Fenster auf meiner Seite weitersurfen, nicht mal, wenn der download beendet ist...das Problem tritt aber nur auf, wenn ich von topframe aus (ich arbeite mit frames) eine Seite ins Mainframe laden will...wenn ich vom mainframe aus eine Seite ins mainframe laden will, geht's problemlos...und wenn ich erstmal vom Mainframe aus eine Seite ins Mainframe geladen hab' geht's danach auch wieder vom Topframe aus...aber nur dann...hab' schon nen haufen Sachen probiert, ich dachte zuerst, es würde hiermit (http://de.php.net/manual/de/function.session-write-close.php) zusammenhängen, aber Fehlanzeige...

da mein Hauptmenü im Topframe ist und die meisten Leute leider noch den IE6 verwenden ist es sehr wichtig, dass es funktioniert...ich hab' es keine Ahnung woran es liegt, das Problem erscheint mir völlig unlogisch...:confused:

Kann mir da jemand weiterhelfen
 
Zurück