Antworten auf deine Fragen:
Neues Thema erstellen

Falsche Informationen in "Speichern unter"-Dialog

emtrion

Nicht mehr ganz neu hier

Hallo zusammen,

ich möchte das beim Downloaden verschiedener Dateien die auf dem Webspace liegen gleich der "Speichern unter"-Dialog des Browsers erscheint. Dies funktioniert soweit auch mit dem folgenden PHP-Skript:

PHP:
<?PHP
    if(isset($_GET['file'])){
        $file = $_GET['file'];
    }
    else{
        echo "Fehler! Abbruch!";
        die;
    }
    echo "<br> ".$file;

    $size = filesize($file);
    header("Pragma: public");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Content-Type: application/force-download");
    header("Content-Disposition: attachment; filename=" . basename($file));
    header("Content-Description: File Transfer");
    if ($size > 0) {
        header('Content-length: ' . $size);
    } else {
        header('Content-length: ' . @strlen(@file_get_contents($file)));
    } 
    readfile($file);
?>
Allerdings bekomme ich im Firefox als Typ immer MP3 angezeigt. Die Dateien sind aber PDF oder JPG. Unter "Öffnen mit" zeigt Firefox auch wieder das richtige an (ich vermute Firefox wertet dafür die Datei selbst nochmal aus). Siehe Bild:



Kann mir jemand sagen wo der Fehler in meinem Script liegt? Welche Content Angabe fehlt oder ist falsch?

Grüße,
Stephan
 

emtrion

Nicht mehr ganz neu hier

AW: Falsche Informationen in "Speichern unter"-Dialog

Ich glaub ich hab es geschafft! :)

Men Problem trat auf, sobald ich die Zeile
PHP:
header("Content-Type: application/force-download");
benutzt hatte. Wenn ich die Zeile weglasse, dann geht es in Firefox zwar, aber Safari ist damit nicht zufrieden. Also hab ich über mime_content_type() wieder versucht den MimeType mitzugeben. Hat bei mir aber ebenfalls nicht funktioniert, da es die Funktion mime_content_type() nicht gab.

Also hab ich dafür folendes eingefügt und die Funktion quasi nachgebaut:
PHP:
if(!function_exists('mime_content_type')) {


    function mime_content_type($filename) {
        
        $mime_types = array(

            'txt' => 'text/plain',
            'htm' => 'text/html',
            'html' => 'text/html',
            'php' => 'text/html',
            'css' => 'text/css',
            'js' => 'application/javascript',
            'json' => 'application/json',
            'xml' => 'application/xml',
            'swf' => 'application/x-shockwave-flash',
            'flv' => 'video/x-flv',

            // images
            'png' => 'image/png',
            'jpe' => 'image/jpeg',
            'jpeg' => 'image/jpeg',
            'jpg' => 'image/jpeg',
            'gif' => 'image/gif',
            'bmp' => 'image/bmp',
            'ico' => 'image/vnd.microsoft.icon',
            'tiff' => 'image/tiff',
            'tif' => 'image/tiff',
            'svg' => 'image/svg+xml',
            'svgz' => 'image/svg+xml',

            // archives
            'zip' => 'application/zip',
            'rar' => 'application/x-rar-compressed',
            'exe' => 'application/x-msdownload',
            'msi' => 'application/x-msdownload',
            'cab' => 'application/vnd.ms-cab-compressed',

            // audio/video
            'mp3' => 'audio/mpeg',
            'qt' => 'video/quicktime',
            'mov' => 'video/quicktime',

            // adobe
            'pdf' => 'application/pdf',
            'psd' => 'image/vnd.adobe.photoshop',
            'ai' => 'application/postscript',
            'eps' => 'application/postscript',
            'ps' => 'application/postscript',

            // ms office
            'doc' => 'application/msword',
            'rtf' => 'application/rtf',
            'xls' => 'application/vnd.ms-excel',
            'ppt' => 'application/vnd.ms-powerpoint',

            // open office
            'odt' => 'application/vnd.oasis.opendocument.text',
            'ods' => 'application/vnd.oasis.opendocument.spreadsheet',
        );

        $ext = strtolower(array_pop(explode('.',$filename)));
        if (array_key_exists($ext, $mime_types)) {
            return $mime_types[$ext];
        }
        elseif (function_exists('finfo_open')) {
            $finfo = finfo_open(FILEINFO_MIME);
            $mimetype = finfo_file($finfo, $filename);
            finfo_close($finfo);
            return $mimetype;
        }
        else {
            return 'application/octet-stream';
        }
    }
}
Bei mir funktioniert es jetzt soweit in IE, Firefox, und Safari. In Chrom ebenfalls aber der startet den Download immer automatisch ohne einen "Speichern unter"-Dialog. Ich vermute aber das ich das nicht über PHP steuern kann, sondern das dies am Browser liegt.

Grüße,
Stephan
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.565
Beiträge
1.538.067
Mitglieder
67.488
Neuestes Mitglied
Andrew56524
Oben