mod_rewrite: bilder per php "includen"?

Josh

Legendäres Mitglied
hi alle

ich fange per mod_rewrite alle anfragen auf den ordner xxx ab und leite sie auf index.php weiter:

RewriteRule ^(.*)$ index.php

dort befindet sich wichtige business logic welche entscheidet, was genau angezeigt werden soll. die gewünschte datei wird dann in index.php per include() eingebunden, so dass der benutzer von aussen eigentlich nichts merkt; die url

xxx/sounds/irgendeine-datei.mp3

würde z.b. ergeben, dass eine musikdatei heruntergeladen wird, wobei den benutzer überhaupt nicht interessieren muss, wo sich diese genau befindet auf dem server, sondern das erledigt index.php mit seiner business logic.

dies funktioniert mit textfiles, html files etc gut, aber mit bildern z.b. habe ich probleme. die werden dann nämlich einfach als zeichenkette im browser angezeigt, was natürlich nicht sinn der sache ist.
also muss ich die bilder und andere dateien irgendwie anders senden, und nicht per include() einfach einbinden. doch wie genau kann ich das tun? per header("location:...") macht es keinen sinn, da dies das verstecken der richtigen URL per mod_rewrite sinnlos machen würde...
ich denke, man sollte dem browser irgendwie mitteilen, dass es sich um eine bild handelt, und dass er sie nicht einfach als string darstellen soll...

etwas umständlich, das zu beschreiben, ich hoffe ihr versteht mich.
wink.gif


vielen dank für ratschläge.
smile.gif

Josh
 
Hallo Josh,

ich habe mal so absolut garkeine ahnung von PHP, aber könntest du nicht eine HTML Seite mit dem Bild abspeichern und diese dann einfügen?

gruss

Tim
 
Der Browser zeigt das nur falsch an, weil er nicht erwartet, dass da ein Bild daherkommt. Ich hab das in ASP gemacht, dort musste ich nur ein paar Header-Einstellungen setzen, ich glaube Content-Type und noch zwei andere. Genau hab ichs jetzt nicht mehr im Kopf, ich müsste auf der anderen Maschine suchen und die hat schon Feierabend ;-)

Aber mit dem Content-Type müsstest Du weiterkommen, sonst guck mal in Deinem Browser die Headers an, wenn er ein Bild anfordert.

Griessli
Irene
 
Danke euch, genau das mit dem Header hab ich mir auch gedacht. Ich werd's mir anschauen.
 
QUOTE (bull @ Mi 3.8.2005, 21:42) header("Content-type: image/jpeg");

Danke, dies hat das Problem soweit gelöst.
Ich habe bemerkt, dass meine *.gif Datei angezeigt wird, egal ob ich image/jpeg, image/jpg oder image/gif als Headertyp angegeben habe. Liegt dies am Browser (Firefox)?

Meines Wissens kann man auf jedem Server manuell die Headertypen für die verschiedenen Dateiendungen spezifizieren, richtig? Wo finde ich dies (ich benutze eine aktuelle Version von XAMPP)?

Wo finde ich eine ausführliche Auflistung der gebräuchlichen Headertypen im Internet?

Vielen herzlichen Dank für Hilfe.
smile.gif

Josh
 
Geht auch mit mod_headers
z.B.
<Files ~ \-[0-9]?\.htm$>
Header add Expires "0"
Header add Pragma "no-cache"
Header add Cache-Control "no-cache, no-store, must-revalidate"
</Files>

----

im Falle von Bildern könnte auch mittels fopen erst die entspr Datei geöffnet werden, die ersten 3 Bytes auf "GIF" überprüft werden und dann entspr image/jpeg oder image/gif gesendet werden, der Dateiinhalt mit echo ausgegeben.

Header: http://www.w3.org/Protocols/HTTP/HTRQ_Headers.html
 
fals es noch aktuell ist dafür gibt es eine gute PHP Funktion:

http://de2.php.net/manual/de/function.mime-content-type.php

wer die Funktion in php nicht hat kann auf Unix Systemen folgendes als umgehung benutzen:

CODE
if (!function_exists('mime_content_type')) {
function mime_content_type($f) {
$f = escapeshellarg($f);
return trim( `file -bi $f` );
}
}



dieser Code steht als Kommentar in oben genanntem Link.
 
QUOTE (manuel @ Do 4.8.2005, 10:28) fals es noch aktuell ist dafür gibt es eine gute PHP Funktion:

http://de2.php.net/manual/de/function.mime-content-type.php

wer die Funktion in php nicht hat kann auf Unix Systemen folgendes als umgehung benutzen:


CODE
if (!function_exists('mime_content_type')) {
function mime_content_type($f) {
$f = escapeshellarg($f);
return trim( `file -bi $f` );
}
}



dieser Code steht als Kommentar in oben genanntem Link.

hrm bei mir scheint die funktion nicht vorhanden zu sein, dabei sollte sie es ab PHP 4.3.0, und ich habe 4.3.11...

auch der workaround gibt bei mir nix zurück...
sad.gif
 
QUOTE (Josh @ Do 4.8.2005, 10:01)Ich habe bemerkt, dass meine *.gif Datei angezeigt wird, egal ob ich image/jpeg, image/jpg oder image/gif als Headertyp angegeben habe. Liegt dies am Browser (Firefox)?

Ich glaub nicht dass das Firefox-spezifisch ist. Der IE macht das auch, und es geht auch wenn man z.B. ein Gif-File auf dem lokalen Disk hat, es in .jpg umbenennt und mit dem Browser oder einem Grafikprogramm (z.B. Paint, Photo Editor) aufmacht. Die Grafiktools sind glaub alle ziemlich tolerant, was die Dateitypen angeht, Hauptsache es ist ein Format das sie kennen.

Eine Auflistung der Mime-Type findest Du unter http://de.selfhtml.org/diverses/mimetypen.htm#uebersicht .

Griessli
Irene
 
Zurück
Oben