PHP mit anderer Dateiendung

Was mache ich, damit ich einen PHP skribt ausführen kann der in einer Datei mit anderen Endung liegt?
Z.B Bild.jpg ist ein bild mit Festen Hintergrund und dem Schriftzug ‚hallo, $benutzername‘.
Man könnte jetzt in einem Imagetag folgendes einfügen:
bild.php?Backgr=hintergr.jpg&user=Manfred …
In ein Webseite eingebunden klappt das wundarbar. Öffnet man das Bild direkt, wird es nicht als Bild erkannt, sondern als wirre Zeichencode auf dme Browser angezeigt.

Kann man vieleicht in der .htaccess was ändern, das gegebnenfalls auch eine jpg Datei ausgeführt wird: bild.jpg?Backgr=hintergr.jpg&user=Manfred

Oder besteht die möglichkeit dem Browser Ordner vor zu gaukeln:
bild.php/hintergr.jpg/Manfred
Wie lese ich die information dann aus der URL aus?

Bahnhof o_O
irgendwie kann ich da bei Deinen Fragen nicht viele zusammenhänge sehen und ein mässiges Deutsch verhindert auch einiges an Verständnis - zumindest bei mir… aber mal sehen

Was mache ich, damit ich einen PHP skribt ausführen kann der
in einer Datei mit anderen Endung liegt?

in der httpd.conf (Konfigurationsdatei für den apache webserver) gibt es einen Eintrag
AddType application/x-httpd-php
wenn Du da die Endungen dahinterschreibst wird dieser Dateityp ebenfalls durch den php-parser gejagt. Ob das weiterhilf bezweifle ich aber im Moment…
bei mir sieht das z.b. so aus:
AddType application/x-httpd-php .phtml .pwml .php3 .php4 .php .php2 .inc .jpeg
man beachte das .jpeg am Ende…
Ich kann damit php Dateien erstellen, die eigentlich eine Bild-Endung haben. Warum? Damit die Browser keine Probleme haben wenn ich ihnen einen Link gebe, der zwar eine Grafik erzeugt aber erst mal keine Grafik ist… ist nicht ganz schön - aber nachdem ich nur .jpg Dateien verwende nicht weiter von relevanz…

Z.B Bild.jpg ist ein bild mit Festen Hintergrund und dem
Schriftzug ‚hallo, $benutzername‘.
Man könnte jetzt in einem Imagetag folgendes einfügen:
bild.php?Backgr=hintergr.jpg&user=Manfred …
In ein Webseite eingebunden klappt das wundarbar. Öffnet man
das Bild direkt, wird es nicht als Bild erkannt, sondern als
wirre Zeichencode auf dme Browser angezeigt.

sendest Du denn in dem bild.php auch den richtigen header mit?

Kann man vieleicht in der .htaccess was ändern, das
gegebnenfalls auch eine jpg Datei ausgeführt wird:
bild.jpg?Backgr=hintergr.jpg&user=Manfred

die .htaccess dient dem Verzeichnisschutz. Ich denke nicht dass Du da was machen kannst

Oder besteht die möglichkeit dem Browser Ordner vor zu
gaukeln:
bild.php/hintergr.jpg/Manfred
Wie lese ich die information dann aus der URL aus?

URL-Manipulationen sind pfui. Ebenso ist es pfui ordner mit Punkten zu erstellen… Es gab mal einen Virus, der genau das gemacht hat…
der kam dann mit einem Link auf eine
homepage.de/bild.jpg
wobei bild.jpg ein Ordner war. Eine Datei hat auch ein Bild angezeigt aber ein ActiveX oder Javascript hat damals (das Loch ist inzwischen gestopft afaik) den Virus weiter verbreitet.
Dazu kommt dass jeder Browser anders interprätiert und Du damit sicher keine universallösung hinkriegen wirst.

ich hoffe mal ich hab das problem verstanden:

php-Code bleibt immer php-code, egal welche endung du dranhängst
ob nun .jpg oder .java egal, es bleibt immer eine Folge von Befehlen zu Seitengenerierung. Und diese Folge kann man halt in eine Webseite einbinden (dafür gibts ja php), aber nicht direkt so öffnen :wink:

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Also so wie ich das verstanden habe ist bei dir das Problem, das er das feste Bild im Hintergrund als wirres Zeug ausgibt oder?? Auf dem Hintergrund sollte eigentlich der Schriftzug $username o.ä. zu lesen sein. Richtig? Aber dann versteh ich nicht warum du das Bild auslesen willst… Kannst du das nochmal für mich kleinen doofen Menschen erklären? :smiley:

wenn ich richtig zusammenzähle
dann erzeugt er in der PHP-Datei ein Bild, das mit den Werten bestückt wird…
vergleichbar hier:
http://p.infinitedreams.de/upic/upic.php
bei refresh ändern sich die Farben und es steht da auch immer Deine IP…
is bissl unschön aber es ist halt nur eine temporäre Datei gewesen ^^

http://p.infinitedreams.de/upic/upic.php

Genau, so etwas meinte ich. Nur das jetzt die Endung ‚.jpg‘ heißen soll.
Ich habe jetzt auf Opera 7.54 upgedatet. Da wird auch ein Bild, das ‚upic.php‘ heißt angezeigt. Bei der älteren Version gabs da nur den Binärcode des Bildes zusehen.

Ich habe auf dem Apacheserver leider keine Rechte die conf- Datei zu ändern.
Also, es gibt keine möglichkeit, das jpg-Dateien vom PHP Interpreter, interpretieren zu lassen.

Zum Punkto URL Manipulation: http://…/bild.php/bild.jpg, halte ich für keinen Fall für verwerflich. Ich habe ja keine Bösen absichten.
Dann müste ja das ganze Wikipediaprojekt verwerflich sein.
Da kann man ja, wenn man z.B. etwas über SQL erfahren will ‚http://de.wikipedia.org/wiki/SQL‘. man könnte theoretisch auch ‚http://de.wikipedia.org/index.php?wiki=SQL‘ oder ähnliches eingeben, wenn es so programmiert worden wäre. Also, wie gesagt: ‚PFUI‘ ist daran nichts; denn Wikipedia ist in meinen Augen ein sehr wertvolles Projekt.

Also, gibt es eine möglichkeit, Variablen aus ‚vorgegaugelten‘ unterordnern zu lesen?

Hi Munich,

URL-Manipulationen sind pfui.

Sorry, da muss ich widersprechen. Ohne jetzt besserwisserisch klingen zu wollen: Du solltest Dich im Gebiet SEO etwas informieren. Zitat aus Wikipedia:

Google wertet dynamische Webseiten mit Parametern (www.domain.de/?parameter=wert) ab. 
Deshalb nutzen Spammer das Apache-Modul Mod\_Rewrite, um die Parameter im 
Pathnamen (http://www.whois.to/google.de) 
(www.domain.de/parameter/wert.htm) zu verbergen. Weiterhin wird die
Ausgabe der HTML-Seite gepuffert, um im Header die Größe in Bytes 
auszugeben und damit eine statische Seite zu simulieren.

Ich bin zwar sicher nicht für Spammer, aber für ein gutes Pagerank sind URL-Manipulationen bei PHP-Seiten quasi ein muss.
Dass Ordnernamen mit Punkten schlecht bzw. grottenschlecht sind, da gebe ich Dir recht. Noch schlechter ist es, bei der Navigation alle Parameter für den Seitenwechsel mit POST zu übergeben, da sage ich Dir sicher nix neues.

Freundlichen Gruß,
Rudy

http://p.infinitedreams.de/upic/upic.php

Genau, so etwas meinte ich. Nur das jetzt die Endung ‚.jpg‘
heißen soll.
Ich habe jetzt auf Opera 7.54 upgedatet. Da wird auch ein
Bild, das ‚upic.php‘ heißt angezeigt. Bei der älteren Version
gabs da nur den Binärcode des Bildes zusehen.

Auch wenn der richtige Header ausgegeben wurde? Das wäre ein arges Problem, waren die Programmierer betrunken? Opera benutze ich nicht, eigentlich nur, weil es so ein Trumm von Programm ist. Jetzt habe ich einen Grund mehr. :wink: Firefox (aktuell: 1.0.4) ist Dein Freund *g* - klein, hübsch, schnell und sicher - und vor allem: konform.

Ich habe auf dem Apacheserver leider keine Rechte die conf-
Datei zu ändern.

Brauchts net.

Also, es gibt keine möglichkeit, das jpg-Dateien vom PHP
Interpreter, interpretieren zu lassen.

Das verstehe ich nicht. Ist das Deutsch?

Zum Punkto URL Manipulation: http://…/bild.php/bild.jpg,
halte ich für keinen Fall für verwerflich. Ich habe ja keine
Bösen absichten.

Wie schön, das beruhigt uns :smile: Bist also ein netter Kerl… Trotzdem, /bild.php/bild.jpg-> nein. /bilder/bild_x.jpg -> ja.

Dann müste ja das ganze Wikipediaprojekt verwerflich sein.
Da kann man ja, wenn man z.B. etwas über SQL erfahren will
http://de.wikipedia.org/wiki/SQL‘. man könnte theoretisch
auch ‚http://de.wikipedia.org/index.php?wiki=SQL‘ oder
ähnliches eingeben, wenn es so programmiert worden wäre. Also,
wie gesagt: ‚PFUI‘ ist daran nichts; denn Wikipedia ist in
meinen Augen ein sehr wertvolles Projekt.

Dazu habe ich mich bereits geäußert, das kann sich ja keiner
anhören. Wikipedia weiß eben mit Suchmaschinen umzugehen.

Also, gibt es eine möglichkeit, Variablen aus ‚vorgegaukelten‘
unterordnern zu lesen?

Natürlich geht das mit URL-Manipulation, damit geht fast alles.

Also… erstelle eine .htaccess mit folgendem Inhalt:

RewriteEngine on
RewriteRule ^.\*bild\_(.+)\.jpg$ /php/image.php?id=$1 [L]

Erklärung: Du weist Apache an, alle URLs auf deiner Domain (egal ob in der Root oder in einem Unterordner), welche mit
bild_x.jpg enden, auf das im Verzeichnis /php/image.php umzuleiten, und die id als $_GET-Parameter mitzugeben.
z.B.

www.meinedomain.com/bilder/existiert\_nicht/bild\_1.jpg

wird vom Server als

www.meinedomain.com/php/image.php?id=1

verstanden.
(http weggelassen, damit’s kein Link wird)

Nun zum PHP-Skript:

<?php $imagefile = '/root/pfad/zur/domain/img/foto'.$_GET['id'].'.jpg';<br />
 if(isset($\_SERVER['HTTP\_USER\_AGENT']) && preg\_match("/MSIE/", $\_SERVER['HTTP\_USER\_AGENT'])) {
 ini\_set( 'zlib.output\_compression','Off' ); //IE-Bug
 }

 header('Content-type: image/jpeg');
 header('Pragma: public');
 header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
 $picture = imagecreatefromjpeg($imagefile);
 imagejpeg($picture);
?\>

Erklärung: $imagefile enthält den absoluten Dateinamen zum tatsächlichen Bild - Wenn Du das selbst machst, brauchst Du das eh nicht. (wie imagecreatexy funktioniert weißt Du ja). Wichtig sind die Header und den Cache abzuschalten. Weiters der blöde IÄh-Bug: generierte Bilder speichert der IE (abhängig davon, welche Version Du davon hast und welcher der 10E6+1-Patches schon angewandt ist) am liebsten als .bmp, deshalb der Käse mit ini_set. Ansonsten dürfte das Beispiel klar sein. Testen kannst Du das, wenn Du die .htaccess per FTP auf dein Root-Verzeichnis lädst, das Skript als ‚image.php‘ im Verzeichnis /php/ speicherst und im Ordner /img/ ein JPG mit Namen „foto1.jpg“ hochlädst - Bei Aufruf von

www.meinedomain.com/bilder/weissnicht/habichnicht/bild\_1.jpg

wird es dann angezeigt.

Gruß,
Rudy

Danke

Also… erstelle eine .htaccess mit folgendem
Inhalt:

RewriteEngine on
RewriteRule ^.*bild_(.+).jpg$ /php/image.php?id=$1 [L]

Genau so werd ichs machen.

Danke.
P.S.: Wenn ich die .htaccess in den Unterordner /bilder lege, gelten diese Eigenschaften wahrscheinlich nur für den /bilder Ordner und seine Unterordner. Sehe ich das so richtig?

Ja, aber du kannst einfach die anderen Bilder mit einem anderen Dateinamenmuster auf den Server laden, solange sie nicht bild_x.jpg heißen, greift die RewriteRule nicht. Geschmacksache.

Gruß,
Rudy

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Neues Problem: Hilfe
Sobald

RewriteEngine on

in der .htaccess steht kommt folgende Fehlermeldung:

Forbidden
You don't have permission to access /testdir/test.php on this server.

Löscht man RewriteEngine on klappt alles wieder.

Wo liegt das Problem? Wie kann ich die Rechte freigeben?
Kann es sein das die Rewrite Funktion vom Provider her ausgestellt ist?

Hast Du das .htaccess auch versucht, auf das Root-Verzeichnis zu legen? Wenn ja, informier Dich bei Deinem Hoster. Die Skripts sind getestet, die funktionieren.

Gruß,
Rudy

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Ja, hab ich jetzt Probiert… der ganze Server zeigt nun die Meldung.