Firefox hat Problem mit Download-Script

speicher

Erfahrenes Mitglied
Hallo,

ich wollte folgendes Script für meine Downloads verwenden und bin damit eigentlich rundum zufrieden. NN & IE haben mit dem Script auch keine Sorgen, nur mein geliebter Firefox.
Er öffnet das Downloadfenster, erkennt den Dateitypen und bietet die Auswahl zwischen Speichern und Öffnen, jedoch der "OK" Button ist nicht klickbar. (Siehe Anhang)

Weiß jemand warum? Wie kann ich das Script eventuell modifizieren, damit es funktioniert.

P.S. der Aufruf erfolgt durch <a href="download.php?dl=1">Img-Link</a>

download.php
PHP:
<?php


function dl_file($file){

    if (!is_file($file)) { die("<b>404 File not found!</b>"); }

   $len = filesize($file);
   $filename = basename($file);
   $file_extension = strtolower(substr(strrchr($filename,"."),1));


   switch( $file_extension ) {
         case "pdf": $ctype="application/pdf"; break;
     case "exe": $ctype="application/octet-stream"; break;
     case "zip": $ctype="application/zip"; break;
     case "doc": $ctype="application/msword"; break;
     case "xls": $ctype="application/vnd.ms-excel"; break;
     case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
     case "gif": $ctype="image/gif"; break;
     case "png": $ctype="image/png"; break;
     case "jpeg":
     case "jpg": $ctype="image/jpg"; break;
     case "mp3": $ctype="audio/mpeg"; break;
     case "wav": $ctype="audio/x-wav"; break;
     case "mpeg":
     case "mpg":
     case "mpe": $ctype="video/mpeg"; break;
     case "mov": $ctype="video/quicktime"; break;
     case "avi": $ctype="video/x-msvideo"; break;
     case "php":
     case "htm":
     case "html":
     case "txt": die("<b>Cannot be used for ". $file_extension ." files!</b>"); break;

     default: $ctype="application/force-download";
   }


   header("Pragma: public");
   header("Expires: 0");
   header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
   header("Cache-Control: public");
   header("Content-Description: File Transfer");
   header("Content-Type: $ctype");

   $header="Content-Disposition: attachment; filename=".$filename.";";
   header($header );
   header("Content-Transfer-Encoding: binary");
   header("Content-Length: ".$len);
   @readfile($file);
   exit;
}


$files = Array("1" => "radio_bme.pdf",
               "2" => "test.doc");


if (isset($files[$_GET['dl']]))
$erg=dl_file($files[$_GET['dl']]);
?>
 

Anhänge

  • problem.jpg
    problem.jpg
    22,7 KB · Aufrufe: 55
Liegt es vielleicht daran, dass kein Programm zum Öffnen zur Verfügung steht?
Kannst Du auch nicht auf OK klicken, wenn Du sagst "Save to Disk"?

redlama
 
Nein, kann ich nicht und Acrobat ist auch vorhanden. Das heißt, dass ich andere PDF-Dateien, die ich nicht mit diesem Script herunterlade problemlos öffnen und speichern kann.
 
Warum machst Du das eigentlich so kompliziert?
Reicht es nicht normalerweise, wenn Du einen Link zu der Datei legst?
Bsp: <a href="http://www.xyz.de/radio_bme.pdf">radio_bme.pdf</a>
Dann kann man das ganze entweder öffnen oder "Ziel speichern unter", ...

redlama
 
Würde sicherlich auch reichen, aber ich wollte nicht immer gleich den Pfad zu den daten verraten. Vielmehr hatte ich auch gehofft, dass man den Fehler irgendwie umgehen oder beseitigen kann. Ich weiss nur leider nicht, wie.


Ergänzung

Ich habe gerade mit diversen Dateitypen das Script getestet und es hakt eigentlich nur bei PDF. Ich habe nun schon diverse PDF Dateien aus dem I-net heruntergeladen und das Script mit diesen getestet, aber immer wieder der gleiche Fehler. Woran könnte das liegen?
 
Zuletzt bearbeitet:
Wenn du die Dateien als attachement im Header spezifizierst, werden diese heruntergeladen. Also arbeitet dein Skript richtig.
 
Das habe ich doch eigentlich in folgender Zeile gemacht. Oder wo sollte ich noch ein Attachment spezifizieren?

PHP:
   $header="Content-Disposition: attachment; filename=".$file.";";
   header($header );
 
Zurück