Datei anzeigen, die nicht im Webroot liegt

robotex

Grünschnabel
Hi,

Hab' mal wieder ein kleines Problem:

Ich habe ausserhalb meines Webroots, eine PDF-Datei. Und ich versuche gerade ein Script zu schreiben, welches diese PDF "transparent" an den Browser weitergibt.

Ich will nicht, dass die Datei zum Download angeboten wird, sondern, dass sie im Browser angezeigt wird. Ich bekomme aber leider statt des PDF-Inhalts den Quellcode der PDF angezeigt. Habe schon etliche verschiedene header() Kombinationen versucht, aber es klappt nicht. Hab' auch schon im PHP Manual / API Doc geschaut, in Google gesucht und in verschiedenen Foren geguckt, aber meistens wird genau das gegenteil davon besprochen, d.h. wie man ein "Download-fenster" hinbekommt. :-(

Das ganze läuft auf folgendem System:

Server: Win2k, Apache2, PHP 5.0.1.
Browser: Win2k, IE6.0, Firefox 0.9x

Der Quellcode, den ich bisher habe sieht wiefolgt aus:

PHP:
function send_file($path, $file) {
    $status = false;

    // Automatic Download
    header("Pragma: public");
    header("Content-Type: application/octet-stream", false);
    header("Content-Disposition: attachment; filename=".basename($file));


  if (connection_status()!=0) {
      return false;
  }

  if ($file = fopen($path."/".$file, 'rb')) {
      while(!feof($file) and (connection_status()==0)) {
          print(fread($file, 1024*8));
          flush();
      }
      $status = (connection_status()==0);
      fclose($file);
  }

  return($status);
}

Hab' natürlich auch schon andere Varianten ausprobiert, wie z.B. "Content-Disposition: inline" und / oder "Content-Type: application/pdf", usw.. Hat aber alles nichts gebracht.

Hat irgend jemand eine Idee?

Gruss und vielen Dank schonmal,

Roberto
 
Also ob in Downloadfenster aufpoppt oder die Datei im Browser angezeigt wird, entscheidest soweit ich weiss nicht du sondern das System des Anwenders. Und wenn er sie im Browser sehen kann, kann er sie eh auch speichern. Und wenn sie im Browser angezeigt werden soll, denke ich, daß sie auch in einem Ordner liegen muss der für den Browser erreichbar ist.

Vielleicht hängt es aber auch daran:

PHP:
 header("Content-Disposition: attachment;

Ein Attachment ist ja eigentlich ein Anhang, und der wird ja wahrscheinlich nicht im Browser geöffnet. Aber das ist jetzt Halbwissen gepaart mit Mutmaßungen, wollte nur nen Tipp abgeben, da es mir aufgefallen ist.

Warum kopierst du die Datei eigentlich nicht in einen Weberreichbaren Ordner?
 
Wie gesagt, ich hab's auch mit Content-Type: inline versucht. Ob ein "Speichern unter"-Dialog angezeigt wird, kannst Du durch header-manipulation beeinflussen.

Und wenn sie im Browser angezeigt werden soll, denke ich, daß sie auch in einem Ordner liegen muss der für den Browser erreichbar ist.

Nicht, wenn ich ein Script habe, was auf dem Server die Datei lokal ausliest und dann an den Client weitegibt (via fpassthru oder fread und dann ausgeben). Als downloadquelle (link) gebe ich dann das script an. Das klappt auch mit Textdateien, nur nicht mit den verdammten PDFs.

Die Datei darf aus Datenschutzrechtlichen Gründern nicht in einem aus dem Web erreichbaren Ordner liegen. :-(

Gruss,

Roberto
 
Zurück