readfile - Datei anzeigen statt Download

SebHoff

Grünschnabel
Hallo Gemeinde.

Ich hab da glaub ich ein recht blödes Problem, hab leider noch nichts brauchbares dazu gefunden.
Alles was ich bisher gelesen hab geht eigentlich eher in die andere Richtung.
Folgendes:

Ich hab ein Ticket System wo Leute auch einen Anhang senden können.
Wenn ich diesen Anhang anklicke wird dieser immer direkt gedownloaded - ich möchte diesen aber direkt im Browser anzeigen lassen.
Es werden eh nur Grafikdateien und txtx's als upload akzeptiert.

Im Ticket wird der Link/Name der Datei der attachment.php übergeben.
Diese hat folgenden Inhalt:

PHP:
<?php
/**********************************************************************************
* eTicket ñ http://www.eticketsupport.com                                         *
* by Digital Frontiers, UTO                                                       *
***********************************************************************************
* Software Version: eTicket 1.7.3                                                 *
* Software by: Digital Frontiers, UTO (http://www.eticketsupport.com)             *
* Copyright 2008 by: Digital Frontiers, UTO (http://www.eticketsupport.com)       *
* Support, News, Updates at: http://www.eticketsupport.com                        *
***********************************************************************************
* This program is free software; you may redistribute it and/or modify it under   *
* the terms of the provided license as published by Digital Frontiers, UTO.       *
*                                                                                 *
* This program is distributed in the hope that it is and will be useful, but      *
* WITHOUT ANY WARRANTIES; without even any implied warranty of MERCHANTABILITY    *
* or FITNESS FOR A PARTICULAR PURPOSE.                                            *
*                                                                                 *
* See the "license.txt" file for details of the eTicket license.                  *
* The latest version can always be found at http://www.eticketsupport.com.        *
**********************************************************************************/

session_start();
require_once ('init.php');
if (!$login) {
    die(LANG_ERROR_DENIED);
}
if (!isset($_GET['file'])) {
    header('Location: .');
    die;
}
$dir = $db_settings['attachment_dir'];
$filename = basename($_GET['file']);
if (($filename == '.') || ($filename == '..') || ($filename == '')) {
    header('Location: .');
    die;
}
if (!file_exists($dir . $filename)) {
    die(LANG_ERROR_NOTFOUND);
}
$ext = substr(strrchr($filename, '.'), 1);
switch (strtolower($ext)) {
    case 'txt':
        $ctype = 'text/plain';
    break;
    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 'jpg':
        $ctype = 'image/jpg';
   
}
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: public');
header("Content-Type: $ctype");
$user_agent = strtolower($_SERVER['HTTP_USER_AGENT']);
if ((is_integer(strpos($user_agent, 'msie'))) && (is_integer(strpos($user_agent, 'win')))) {
    header('Content-Disposition: filename=' . urlencode($filename) . ';');
} else {
    header('Content-Disposition: attachment; filename=' . urlencode($filename) . ';');
}
/* header('Content-Transfer-Encoding: binary'); */
header('Content-Length: ' . filesize($dir . $filename));
readfile($dir . $filename);
exit();
?>

was ich bisher probiert hab:

readfile in fopen ausgetauscht
den unteren header('Content-Transfer-Encoding: binary'); auskommentiert
die variable $ctype default als application/octet-stream gesetzt

...das ganze in verschiedenen Browsern ausprobiert (Chromium + Safari)
hier im Forum gesucht und gegoogelt... aber alle threads die ich gefunden hab wollten das ganze eher umgekehrt haben - also einen Download statt einer Anzeige.

Ich bin mir sicher das ist nur ein kleines blödes Problem was ich einfach nur übersehen habe.
Manchmal sieht man den Wald vor lauter Bäumen nicht.
Vielleicht seht ihr ja was und könnt mir schnell nen Tipp geben.

Vielen Dank dafür.

Lg,
sebhoff
 
Zuletzt bearbeitet:
Tja, dann sende halt nicht die header, die den entsprechenden Download erzwingen.

Hiermit: $filename = basename($_GET['file']); hast du den file (Ich deke auch den Pfad) ja schon. Ein einfaches prüfen ob der Pfeil existiert und danach einen Link generieren sollte ausreichen ;)
 
ich dacht ich hätt da alle header für nen download umgeschrieben...
vllt kannst du mir noch kurz für mein verständniss erklären um welchen header es sich da handelt.

den code hab ich jetzt sehr vereinfacht:

PHP:
<?php
/**********************************************************************************
* eTicket ñ http://www.eticketsupport.com                                         *
* by Digital Frontiers, UTO                                                       *
***********************************************************************************
* Software Version: eTicket 1.7.3                                                 *
* Software by: Digital Frontiers, UTO (http://www.eticketsupport.com)             *
* Copyright 2008 by: Digital Frontiers, UTO (http://www.eticketsupport.com)       *
* Support, News, Updates at: http://www.eticketsupport.com                        *
***********************************************************************************
* This program is free software; you may redistribute it and/or modify it under   *
* the terms of the provided license as published by Digital Frontiers, UTO.       *
*                                                                                 *
* This program is distributed in the hope that it is and will be useful, but      *
* WITHOUT ANY WARRANTIES; without even any implied warranty of MERCHANTABILITY    *
* or FITNESS FOR A PARTICULAR PURPOSE.                                            *
*                                                                                 *
* See the "license.txt" file for details of the eTicket license.                  *
* The latest version can always be found at http://www.eticketsupport.com.        *
**********************************************************************************/

session_start();
require_once ('init.php');
if (!$login) {
    die(LANG_ERROR_DENIED);
}
if (!isset($_GET['file'])) {
    header('Location: .');
    die;
}
$dir = $db_settings['attachment_dir'];
$filename = basename($_GET['file']);
if (($filename == '.') || ($filename == '..') || ($filename == '')) {
    header('Location: .');
    die;
}
if (!file_exists($dir . $filename)) {
    die(LANG_ERROR_NOTFOUND);
}
echo '<div align="center">';
                 echo '<img src="'.$dir.'/'.$filename.'">';
                 echo '</div><br />';

exit();
?>

mal sehn, vllt. bau ich das noch um das mittels JS ein neues fenster geöffnet wird.
 
Und, funnltioniert der "vereinfachte" Code. Sieht nämlich richtig aus. Und näcchstes mal bitte PHP-Tags benutzen, nicht HTML ;)
 
jop, file wird angezeigt.
ich such grad wie ich den Aufruf in ein JS window.open umändern kann.

ich habs anfänglich mit PHP Tags eingebunden... dann konnte man nix mehr erkennen...
 
OT: Was ist denn das Problem mit den PHP-Tags?
Habs grad geändert und kanns noch immer gut erkennen.
 
Zurück