[PHP] Header Content-Disposition Problem

The Prophet

Rear Admiral
Dabei seit
Aug. 2001
Beiträge
5.981
Nabend ich hab mit meinem aktuellen download Script nen kleines Problem ;)
Die PDF´s liegen in /download. Der Aufruf erfolgt über: download.php?file=agbs
Funktioniert ja auch alles wunderbar. Nur leider kann die Datei in diesem Falle PDF weder im Browser sprich (Acrobat Plugin) betrachtet noch auf der HDD (heruntergeladen) betrachtet werden. Die Files sind per FTP auf den Server gelangt und auch in Ordnung. Schätze mal das was mit dem Header nicht passt. Hab ihn von octet stream aber schon in pdf geändert.
PHP:
<?php

$download = $_GET['file'];

$basedir = "/download";

$filelist = array(
  "agbs" => "AGB.pdf",
  "konditionen"  => "Konditionen.pdf"
);

// download.php direkt download abfangen
if (!isset($filelist[$download]))
  die("Datei $download nicht vorhanden.");

// Dateiname erstellen
$filename = sprintf("%s/%s", $basedir, $filelist[$download]);

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

$save_as_name = basename($filelist[$download]);
header("Content-Disposition: attachment; filename=\"$save_as_name\"");

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

thx


/edit
hab gerade gemerkt das die Filesize überhaupt nicht hinhaut. Weder mit Mozilla / Firefox oder MSIE
 
Zuletzt bearbeitet:

The Prophet

Rear Admiral
Ersteller dieses Themas
Dabei seit
Aug. 2001
Beiträge
5.981
Hmm da könnte ich gleich nen direkten http Download machen.
 

[UPS]Erazor

Lieutenant
Dabei seit
Sep. 2002
Beiträge
753
Du kannst aber ein Download Script schreiben, das dann den Browser nach dem Zählen woanders hinleitet.

PHP:
<?php
increment_counter($file_id);
$file_name = get_file_name($file_id);
header("Location: http://dein-host/$file");
exit();
?>
Wie die Funktionen increment_counter() und get_file_name() implementiert sind und ob überhaupt bleibt dir überlassen. Du hast aber effektiv deinen Download gezählt und den User an das richtige File weitergeleitet.

Wenn du aber einen geschützten Downloadbereich haben möchtest, solltest du es so machen wie du es angefangen hast. Statt readfile wird aber für die Ausgabe einer Datei in den Output Stream des Webservers fpassthru() empfohlen.
 
Zuletzt bearbeitet: (fpassthru, nicht passthru *slap*)

The Prophet

Rear Admiral
Ersteller dieses Themas
Dabei seit
Aug. 2001
Beiträge
5.981
Will eigentlich weder DL´s zählen noch sie als normalen HTML/HTTP Link angeben. fpassthru teste ich mal aber wird glaube keinen Unterschied bringen.
 

[UPS]Erazor

Lieutenant
Dabei seit
Sep. 2002
Beiträge
753
Zitat von The Prophet:
Will eigentlich weder DL´s zählen noch sie als normalen HTML/HTTP Link angeben. fpassthru teste ich mal aber wird glaube keinen Unterschied bringen.
Ich hab irgendwie das mit den Namen verpeilt. Ich dachte DU wolltest DLs zählen und jemand anders... ach egal :)

Ich hab mal ausm phpMyAdmin Code einen kleinen Ausschnitt für dich:
PHP:
<?php
        // finally send the headers and the file
        header('Content-Type: ' . $mime_type);
        header('Expires: ' . $now);
        // lem9 & loic1: IE need specific headers
        if (PMA_USR_BROWSER_AGENT == 'IE') {
            header('Content-Disposition: inline; filename="' . $filename . '.' . $ext . '"');
            header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
            header('Pragma: public');
        } else {
            header('Content-Disposition: attachment; filename="' . $filename . '.' . $ext . '"');
            header('Pragma: no-cache');
        }
?>
 
Zuletzt bearbeitet:

The Prophet

Rear Admiral
Ersteller dieses Themas
Dabei seit
Aug. 2001
Beiträge
5.981
Danke aber irgenwie will es noch immer nicht. Der Dateiname und die Extension stimmen überein aber am Content scheint es zu scheitern.

[EDIT]
Problem hat sich lösen lassen hab mit den relativen / absoluten Pfaden gespielt...
 
Zuletzt bearbeitet:
Top