Tom1tk: Daten via header senden

Hallo,

ich hab vor einiger Zeit mit Eurer Hilfe  http://forum.de.selfhtml.org/archiv/2003/11/63283 folgende (einfache) Bildschleuse gebaut. Rufe ich die Datei mit GET-Parameter auf, frägt mein Browser mich nur, ob ich die Datei öffnen oder speichern will. Er erkennt die Datei aber als php und Startet meinen Editor... Dat is nich gut bei nem Filmchen...

Was mach ich da falsch?

Hintergrund: Ich will nen PW-geschätzten Bereich auf meiner Page bauen, auf dem die User Bildchen, Filme, pdf, ppt usw. via Bildschleuse runterziehen können.

ACHTUNG: Ich hab das ganze File mit abgedruckt, obwohl zwischen drin nur verschiedene MIME-Typen stehen. Interessant sind wahrscheinlich nur die ersten und die letzten Zeilen.

Greets Tom1tk

Ach ja, mit Bilder klappt alles sehr gut, da die mein Brwoser auch darstellen kann. PPTs kann er nicht => Also Zahlensalat!

<?php

unset($pfadzumfile); $pfadzumbild=$_GET["file"];//Wird via GET-Anfrage übergeben z.B.?file=video.mpg oder ?file=animation.ppt

if (file_exists($pfadzumfile)){

$bildinfos=getimagesize($pfadzumfile); $bildtypnr=$bildinfos[2];

$contenttype[1]='image/gif'; $contenttype[2]='image/jpeg'; $contenttype[3]='image/png';

$contenttypedatei=""; $contenttypedatei=$contenttype[$bildtypnr]; /* Falls es eine Bilddatei ist, ist $contenttypdatei jetzt gesetzt. Fuer die uebrigen Dateitypen geht es jetzt noch weiter, z.B. mit einer SWITCH/CASE Struktur: */

if ($contenttypedatei=="") // d.h. wenn noch nicht gesetzt: /* Versuchen, den Dateityp anhand der Endigung zu erraten: */ { $endigung=strtolower(strrchr($pfadzumfile,".")); // alles ab dem letzten Punkt switch($endigung){ case".html": $contenttypedatei="text/html"; break; case ".txt": $contenttypedatei="text/plain"; break; case ".doc": $contenttypedatei="application/msword"; break; case ".pdf": $contenttypedatei="application/pdf"; break;

case ".spl": $contenttypedatei="application/futuresplash"; break;

Flash Futuresplash-Dateien

case ".gz": $contenttypedatei="application/gzip"; break;

GNU Zip-Dateien

case ".xls": $contenttypedatei="application/msexcel"; break;

Microsoft Excel Dateien

case ".xla": $contenttypedatei="application/msexcel"; break;

Microsoft Excel Dateien

case ".hlp": $contenttypedatei="application/mshelp"; break;

Microsoft Windows Hilfe Dateien

case ".ppt": $contenttypedatei="application/mspowerpoint"; break;

Microsoft Powerpoint Dateien

case ".ppz": $contenttypedatei="application/mspowerpoint"; break;

Microsoft Powerpoint Dateien

case ".pps": $contenttypedatei="application/mspowerpoint"; break;

Microsoft Powerpoint Dateien

case ".pot": $contenttypedatei="application/mspowerpoint"; break;

Microsoft Powerpoint Dateien

case ".doc": $contenttypedatei="application/msword"; break;

Microsoft Word Dateien

case ".dot": $contenttypedatei="application/msword"; break;

Microsoft Word Dateien

case ".bin": $contenttypedatei="application/octet-stream"; break;

Ausführbare Dateien

case ".exe": $contenttypedatei="application/octet-stream"; break;

Ausführbare Dateien

case ".com": $contenttypedatei="application/octet-stream"; break;

Ausführbare Dateien

case ".dll": $contenttypedatei="application/octet-stream"; break;

Ausführbare Dateien

case ".class": $contenttypedatei="application/octet-stream"; break;

Ausführbare Dateien

case ".oda": $contenttypedatei="application/oda"; break;

Oda-Dateien

case ".pdf": $contenttypedatei="application/pdf"; break;

Adobe PDF-Dateien

case ".ai": $contenttypedatei="application/postscript"; break;

Adobe Postscript-Dateien

case ".eps": $contenttypedatei="application/postscript"; break;

Adobe Postscript-Dateien

case ".ps": $contenttypedatei="application/postscript"; break;

Adobe Postscript-Dateien

case ".rtf": $contenttypedatei="application/rtf"; break;

Microsoft RTF-Dateien

case ".gtar": $contenttypedatei="application/x-gtar"; break;

GNU tar-Archiv-Dateien

case ".php": $contenttypedatei="application/x-httpd-php"; break;

PHP-Dateien

case ".phtml": $contenttypedatei="application/x-httpd-php"; break;

PHP-Dateien

case ".js": $contenttypedatei="application/x-javascript"; break;

serverseitige JavaScript-Dateien

case ".bin": $contenttypedatei="application/x-macbinary"; break;

Macintosh Binärdateien

case ".swf": $contenttypedatei="application/x-shockwave-flash"; break;

Flash Shockwave-Dateien

case ".cab": $contenttypedatei="application/x-shockwave-flash"; break;

Flash Shockwave-Dateien

case ".tar": $contenttypedatei="application/x-tar"; break;

tar-Archivdateien

case ".zip": $contenttypedatei="application/zip"; break;

ZIP-Archivdateien

case ".au": $contenttypedatei="audio/basic"; break;

Sound-Dateien

case ".snd": $contenttypedatei="audio/basic"; break;

Sound-Dateien

case ".aif": $contenttypedatei="audio/x-aiff"; break;

AIFF-Sound-Dateien

case ".aiff": $contenttypedatei="audio/x-aiff"; break;

AIFF-Sound-Dateien

case ".aifc": $contenttypedatei="audio/x-aiff"; break;

AIFF-Sound-Dateien

case ".midi": $contenttypedatei="audio/x-midi"; break;

MIDI-Dateien

case ".mid": $contenttypedatei="audio/x-midi"; break;

MIDI-Dateien

case ".mp2": $contenttypedatei="audio/x-mpeg"; break;

MPEG-Dateien

case ".mp3": $contenttypedatei="audio/x-mpeg"; break;

MPEG-Dateien

case ".ram": $contenttypedatei="audio/x-pn-realaudio"; break;

RealAudio-Dateien

case ".ra": $contenttypedatei="audio/x-pn-realaudio"; break;

RealAudio-Dateien

case ".rpm": $contenttypedatei="audio/x-pn-realaudio-plugin"; break;

RealAudio-Plugin-Dateien

case ".stream": $contenttypedatei="audio/x-qt-stream"; break;

-Dateien

case ".wav": $contenttypedatei="audio/x-wav"; break;

Wav-Dateien

case ".dwf": $contenttypedatei="drawing/x-dwf"; break;

Drawing-Dateien

case ".fif": $contenttypedatei="image/fif"; break;

FIF-Dateien

case ".gif": $contenttypedatei="image/gif"; break;

GIF-Dateien

case ".ief": $contenttypedatei="image/ief"; break;

IEF-Dateien

case ".jpeg": $contenttypedatei="image/jpeg"; break;

JPEG-Dateien

case ".jpg": $contenttypedatei="image/jpeg"; break;

JPEG-Dateien

case ".jpe": $contenttypedatei="image/jpeg"; break;

JPEG-Dateien

case ".tiff": $contenttypedatei="image/tiff"; break;

TIFF-Dateien

case ".tif": $contenttypedatei="image/tiff"; break;

TIFF-Dateien

case ".csv": $contenttypedatei="text/comma-separated-values"; break;

komma-separierte Datendateien

case ".css": $contenttypedatei="text/css"; break;

CSS Stylesheet-Dateien

case ".htm": $contenttypedatei="text/html"; break;

-Dateien

case ".html": $contenttypedatei="text/html"; break;

-Dateien

case ".shtml": $contenttypedatei="text/html"; break;

-Dateien

case ".js": $contenttypedatei="text/javascript"; break;

JavaScript-Dateien

case ".txt": $contenttypedatei="text/plain"; break;

reine Textdateien

case ".rtx": $contenttypedatei="text/richtext"; break;

Richtext-Dateien

case ".rtf": $contenttypedatei="text/rtf"; break;

Microsoft RTF-Dateien

case ".tsv": $contenttypedatei="text/tab-separated-values"; break;

tabulator-separierte Datendateien

case ".wml": $contenttypedatei="text/vnd.wap.wml"; break;

WML-Dateien (WAP)

case ".wmlc": $contenttypedatei="application/vnd.wap.wmlc"; break;

WMLC-Dateien (WAP)

case ".wmls": $contenttypedatei="text/vnd.wap.wmlscript"; break;

WML-Scriptdateien (WAP)

case ".wmlsc": $contenttypedatei="application/vnd.wap.wmlscriptc"; break;

WML-Script-C-dateien (WAP)

case ".mpeg": $contenttypedatei="video/mpeg"; break;

MPEG-Dateien

case ".mpg": $contenttypedatei="video/mpeg"; break;

MPEG-Dateien

case ".mpe": $contenttypedatei="video/mpeg"; break;

MPEG-Dateien

case ".qt": $contenttypedatei="video/quicktime"; break;

Quicktime-Dateien

case ".mov": $contenttypedatei="video/quicktime"; break;

Quicktime-Dateien

case ".avi": $contenttypedatei="video/x-msvideo"; break;

Microsoft AVI-Dateien

case ".movie": $contenttypedatei="video/x-sgi-movie"; break;

Movie-Dateien

case ".wrl": $contenttypedatei="x-world/x-vrml"; break;

VRML-Dateien

default: $contenttypedatei="application/octet-stream"; break; }//Ende Switch Case struktur }//Ende if Abfrage ob ContentTypeDatei=""

header("Content-Type: $contenttypedatei"); readfile($pfadzumbild); }//Ende Abfrage, ob pfadzumbild="" else{

Print "File gibts net"; }

?>

  1. Hi,

    Rufe ich die Datei mit GET-Parameter auf, frägt mein Browser mich nur, ob ich die Datei öffnen oder speichern will.

    _welcher_ Browser? Eine URL zum Test wäre sinnvoll, um die _wirklich_ versendeten Header sehen zu können.

    switch($endigung){
    case".html":
    $contenttypedatei="text/html";
    break;
    case ".txt":

    [...]

    Dass man dies mit einem assoziativen Array deutlich einfacher lösen kann, ist Dir bewusst?

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi,

      Dass man dies mit einem assoziativen Array deutlich einfacher lösen kann, ist Dir bewusst?

      bewußt ja, aber grad nicht dran gedacht...

      http://www.tomatengelb.de/test/index.php

      Du kannst folgende Dateien aufrufen:

      http://www.tomatengelb.de/test/?bild=Antivir.jpg

      http://www.tomatengelb.de/test/?bild=Desperate.mpg

      http://www.tomatengelb.de/test/?bild=Kopfschmerz.pps

      http://www.tomatengelb.de/test/?bild=Schwedisch.pdf

      Vielleicht hilft das weiter...

      Ich hab auch ne Text EVrsion davon unter
      http://www.tomatengelb.de/test/index.php.txt auf diesem Server!

      Greets Tom

      1. Hi,

        Du kannst folgende Dateien aufrufen:

        [...]

        Vielleicht hilft das weiter...

        leider nein. Ich kann hier weder ein Problem erkennen noch reproduzieren. Abgesehen davon, dass mein IE versucht, die PDF-Ressource im Browser zu öffnen, was mangels Plugin aber nicht geht, so dass ich nur ein Broken Image(!) erhalte - super, Billyboy.

        Cheatah

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Hallo

          Andere Ideen, wie ich pdf's, ppt's und mpg's  schützen kann (ohne htaccess) ?

          Wie werden denn solche Dateien aus ner Datenbank rausgeholt und ausgegeben? Da braucht man doch auch solch ein Script, oder??

          Greets Tom1tk

        2. Hallo nachmals,

          ich glaub ich habs!!!!!!!

          Und zwar lag der Fehler daran, dass mein Browser immer ein php-Datei ausgeben wollte => Stantard-Programm für PHP ist mein Editor => Filme, PPS usw. wurden im Editor ausgegeben...
          Jetzt schicke ich einen Namen mit: Dann erkennt mein Browser, dass da ne mpg- oder pps-Datei kommt und öffnet die entsprechenden Progs.

          Beispiel:
          // Wir werden eine PPS Datei ausgeben
          header("Content-type: application/mspowerpoint");

          // Es wird NeuerName.pps benannt
          header("Content-Disposition: attachment; filename=NeuerName.pps");

          // Die originale Datei heißt AlterName.pps
          readfile('AlterName.pps');

          Gefunden bei: http://www.dynamic-webpages.de/php/function.header.php

          Ich werde das noch ausgiebiger testen, aber ich glaube das wars.

          Greets Tom1tk

          1. Hi,

            das war nur ein Teil der Lösung.

            Bei .mpg wir zwar der Player geöffnet, aber nichts ausgegeben....

            Hat jemand noch Ideen?
            Bei allen anderen Formaten klappts.

            Greets Tom1tk