[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
REDAXO Forum • Demo Download setzt falschen Header
Seite 1 von 1

Demo Download setzt falschen Header

Verfasst: 8. Jun 2019, 19:14
von joachim123
hi all,

ich verwende das Download Modul aus der Demo für PDF Dateien (PHP 7.2):
<?php
$file_name = strtolower(preg_replace("/[^a-zA-Z0-9.\-\$\+]/","_",rex_request('file', 'string')));
$file_type = "application/octetstream";
$file_path = rex_path::media($file_name);

if ($file_name != "" && $fp = @fopen("$file_path", "r")) {

header("Expires: Mon, 01 Jan 2000 01:01:01 GMT"); // Date in the past
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // always modified
header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Cache-Control: private");
header("Pragma: no-cache");
header("Content-Type: $file_type; name=\"$file_name\"");
header("Content-Disposition: attachment; filename=\"$file_name\"");

fpassthru ($fp);
fclose($fp);

} else {
echo "<div class=warning>Download fehlgeschlagen</div>";
}
?>
Bin grade darauf gestossen, dass zuweilen der Download nicht funktioniert. Grund: es wird _immer_ der text/html Content-Type gesetzt und manche Browser zeigen dann kryptische Zeichen an. Das Script funktioniert ansonsten fehlerfrei, der Expire Header wird z.B auch korrekt gesetzt. Es wird also auch kein Header-already-send oder sowas angezeigt...

Bin nun etwas ratlos und bräuchte einen Tipp: warum lässt sich der Content-Type Header selbst hardgecoded nicht setzen?

Merci & Grüsse, Joachim

Re: Demo Download setzt falschen Header

Verfasst: 9. Jun 2019, 01:00
von joachim123
hi all,

Lösung gefunden, rex_response übernimmt...
rex_response::sendFile($file_path, 'application/pdf', $contentDisposition = 'attachment');
rex_response::sendCacheControl($cacheControl = 'must-revalidate, proxy-revalidate, private, no-cache, max-age=0');
rex_response::sendLastModified($lastModified = gmdate('D, d M Y H:i:s') . ' GMT');
Grüsse, Jo