Daten via header senden
Tom1tk
- php
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;
case ".gz": $contenttypedatei="application/gzip"; break;
case ".xls": $contenttypedatei="application/msexcel"; break;
case ".xla": $contenttypedatei="application/msexcel"; break;
case ".hlp": $contenttypedatei="application/mshelp"; break;
case ".ppt": $contenttypedatei="application/mspowerpoint"; break;
case ".ppz": $contenttypedatei="application/mspowerpoint"; break;
case ".pps": $contenttypedatei="application/mspowerpoint"; break;
case ".pot": $contenttypedatei="application/mspowerpoint"; break;
case ".doc": $contenttypedatei="application/msword"; break;
case ".dot": $contenttypedatei="application/msword"; break;
case ".bin": $contenttypedatei="application/octet-stream"; break;
case ".exe": $contenttypedatei="application/octet-stream"; break;
case ".com": $contenttypedatei="application/octet-stream"; break;
case ".dll": $contenttypedatei="application/octet-stream"; break;
case ".class": $contenttypedatei="application/octet-stream"; break;
case ".oda": $contenttypedatei="application/oda"; break;
case ".pdf": $contenttypedatei="application/pdf"; break;
case ".ai": $contenttypedatei="application/postscript"; break;
case ".eps": $contenttypedatei="application/postscript"; break;
case ".ps": $contenttypedatei="application/postscript"; break;
case ".rtf": $contenttypedatei="application/rtf"; break;
case ".gtar": $contenttypedatei="application/x-gtar"; break;
case ".php": $contenttypedatei="application/x-httpd-php"; break;
case ".phtml": $contenttypedatei="application/x-httpd-php"; break;
case ".js": $contenttypedatei="application/x-javascript"; break;
case ".bin": $contenttypedatei="application/x-macbinary"; break;
case ".swf": $contenttypedatei="application/x-shockwave-flash"; break;
case ".cab": $contenttypedatei="application/x-shockwave-flash"; break;
case ".tar": $contenttypedatei="application/x-tar"; break;
case ".zip": $contenttypedatei="application/zip"; break;
case ".au": $contenttypedatei="audio/basic"; break;
case ".snd": $contenttypedatei="audio/basic"; break;
case ".aif": $contenttypedatei="audio/x-aiff"; break;
case ".aiff": $contenttypedatei="audio/x-aiff"; break;
case ".aifc": $contenttypedatei="audio/x-aiff"; break;
case ".midi": $contenttypedatei="audio/x-midi"; break;
case ".mid": $contenttypedatei="audio/x-midi"; break;
case ".mp2": $contenttypedatei="audio/x-mpeg"; break;
case ".mp3": $contenttypedatei="audio/x-mpeg"; break;
case ".ram": $contenttypedatei="audio/x-pn-realaudio"; break;
case ".ra": $contenttypedatei="audio/x-pn-realaudio"; break;
case ".rpm": $contenttypedatei="audio/x-pn-realaudio-plugin"; break;
case ".stream": $contenttypedatei="audio/x-qt-stream"; break;
case ".wav": $contenttypedatei="audio/x-wav"; break;
case ".dwf": $contenttypedatei="drawing/x-dwf"; break;
case ".fif": $contenttypedatei="image/fif"; break;
case ".gif": $contenttypedatei="image/gif"; break;
case ".ief": $contenttypedatei="image/ief"; break;
case ".jpeg": $contenttypedatei="image/jpeg"; break;
case ".jpg": $contenttypedatei="image/jpeg"; break;
case ".jpe": $contenttypedatei="image/jpeg"; break;
case ".tiff": $contenttypedatei="image/tiff"; break;
case ".tif": $contenttypedatei="image/tiff"; break;
case ".csv": $contenttypedatei="text/comma-separated-values"; break;
case ".css": $contenttypedatei="text/css"; break;
case ".htm": $contenttypedatei="text/html"; break;
case ".html": $contenttypedatei="text/html"; break;
case ".shtml": $contenttypedatei="text/html"; break;
case ".js": $contenttypedatei="text/javascript"; break;
case ".txt": $contenttypedatei="text/plain"; break;
case ".rtx": $contenttypedatei="text/richtext"; break;
case ".rtf": $contenttypedatei="text/rtf"; break;
case ".tsv": $contenttypedatei="text/tab-separated-values"; break;
case ".wml": $contenttypedatei="text/vnd.wap.wml"; break;
case ".wmlc": $contenttypedatei="application/vnd.wap.wmlc"; break;
case ".wmls": $contenttypedatei="text/vnd.wap.wmlscript"; break;
case ".wmlsc": $contenttypedatei="application/vnd.wap.wmlscriptc"; break;
case ".mpeg": $contenttypedatei="video/mpeg"; break;
case ".mpg": $contenttypedatei="video/mpeg"; break;
case ".mpe": $contenttypedatei="video/mpeg"; break;
case ".qt": $contenttypedatei="video/quicktime"; break;
case ".mov": $contenttypedatei="video/quicktime"; break;
case ".avi": $contenttypedatei="video/x-msvideo"; break;
case ".movie": $contenttypedatei="video/x-sgi-movie"; break;
case ".wrl": $contenttypedatei="x-world/x-vrml"; break;
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"; }
?>
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
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
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
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
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
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