Bild in php darstellen

Hallo,

ich programmiere nur ganz gelegentlich in PHP.
Manchmal möchte ich meine Seiten aber trotzdem ändern.

Wenn ich einen Text ausgeben will schreibe ich:
<?PHP
$txt=file_get_contents("neu.txt");
echo $txt;
?>

Bei einem Bild schreibe ich in HTML:

<img src="http://meinwww.de/bilder/bild.jpg" alt="meine Bild">

Nachteil: beim zweiten Aufruf erscheint das Bild aus dem Cache,
dabei hat es sich möglicherweise geändert.

Deshalb würde ich gern schreiben:

<?PHP
$bild=file_get_contents("bild.jpg");
echo $bild; //falsch!
?>

Wie mache ich das richtig?

MFG Joachim


--
Joachim Mohr Tübingen
http://www.joachimmohr.de/neu.html
Joachim Mohr [ Mo, 28 Januar 2008 17:14 ] [ ID #1918370 ]

Re: Bild in php darstellen

Joachim Mohr schrieb:
> Hallo,
>
> ich programmiere nur ganz gelegentlich in PHP.
> Manchmal möchte ich meine Seiten aber trotzdem ändern.
>
> Wenn ich einen Text ausgeben will schreibe ich:
> <?PHP
> $txt=3Dfile_get_contents("neu.txt");
> echo $txt;
> ?>
>
> Bei einem Bild schreibe ich in HTML:
>
> <img src=3D"http://meinwww.de/bilder/bild.jpg" alt=3D"meine Bild">
>
> Nachteil: beim zweiten Aufruf erscheint das Bild aus dem Cache,
> dabei hat es sich möglicherweise geändert.

Dann muss das JPEG Bild dem Browser mitteilen das es nicht gecached
werden moechte. Mehr dazu in der RFC deines Vertrauens.


Einige Browsern kann man ueberreden in dem die URL veraendern wird per
JS oder halt beim neuladen der Seite.

<img src=3D"http://example.com/bilder/bild.jpg?rand=3D123545t6643" ... />=


> Deshalb würde ich gern schreiben:
>
> <?PHP
> $bild=3Dfile_get_contents("bild.jpg");
> echo $bild; //falsch!
> ?>
>
> Wie mache ich das richtig?


Du must ein bild.php Script schreiben was

1. HTTP Header setzt
2. per readfile() anstelle von file_get_contents die Inhalt weiterreicht.=


Gruss
Joerg

--
TakeNet GmbH, Geschaeftsfuehrer Wolfgang Meier
97080 Wuerzburg Tel: +49 931 903-2243
Alfred-Nobel-Straße 20 Fax: +49 931 903-3025
HRB Wuerzburg 6940 http://www.takenet.de
Joerg Behrens [ Mo, 28 Januar 2008 17:23 ] [ ID #1918371 ]

Re: Bild in php darstellen

Hallo Joachim,


> Nachteil: beim zweiten Aufruf erscheint das Bild aus dem Cache,
> dabei hat es sich möglicherweise geändert.

Dann teile im HTTP-Header dem UA mit, dass _nicht_ gecacht werden soll.

Das könnte helfen:

http://de.php.net/manual/de/ref.image.php#59420


Ciao Sven
Sven Schrodt [ Mo, 28 Januar 2008 18:26 ] [ ID #1918372 ]

Re: Bild in php darstellen

Joerg Behrens meinte:

> Einige Browsern kann man ueberreden in dem die URL veraendern wird per
> JS oder halt beim neuladen der Seite.
>
> <img src="http://example.com/bilder/bild.jpg?rand=123545t6643" ... />

Besser ist es den Timestamp des Files anzuhängen.
etwa

echo "<img src='$meinbildchen?".filemtime($meinbildchen)."'>"

Wenn sich die Datei nicht geändert hat, kann sie auch gecacht werden.

Gregor


--
http://photo.gregorkofler.at ::: Landschafts- und Reisefotografie
http://web.gregorkofler.com ::: meine JS-Spielwiese
http://www.image2d.com ::: Bildagentur für den alpinen Raum
Gregor Kofler [ Mo, 28 Januar 2008 18:29 ] [ ID #1918373 ]

Re: Bild in php darstellen

Joachim Mohr <jomolero [at] web.de> wrote:
> <img src="http://meinwww.de/bilder/bild.jpg" alt="meine Bild">
>
> Nachteil: beim zweiten Aufruf erscheint das Bild aus dem Cache,
> dabei hat es sich möglicherweise geändert.

Solche Sachen lassen sich bei den meisten Webservern einstellen.
Ich empfehle die entsprechende Anleitung der Serversoftware zu
lesen.


--
Web (en): http://www.no-spoon.de/ -*- Web (de): http://www.frell.de/
Stefan Scholl [ Di, 29 Januar 2008 09:34 ] [ ID #1919340 ]

Re: Bild in php darstellen

Stefan Scholl <stesch [at] no-spoon.de> wrote:
> Joachim Mohr <jomolero [at] web.de> wrote:
>> <img src="http://meinwww.de/bilder/bild.jpg" alt="meine Bild">
>>
>> Nachteil: beim zweiten Aufruf erscheint das Bild aus dem Cache,
>> dabei hat es sich möglicherweise geändert.
>
> Solche Sachen lassen sich bei den meisten Webservern einstellen.
> Ich empfehle die entsprechende Anleitung der Serversoftware zu
> lesen.

Hier für Lighttpd:
http://trac.lighttpd.net/trac/wiki/Docs%3AModExpire

(Enthält auch Link auf Anleitung zu mod_expires von Apache 1.3.)


--
Web (en): http://www.no-spoon.de/ -*- Web (de): http://www.frell.de/
Stefan Scholl [ Di, 29 Januar 2008 09:47 ] [ ID #1919342 ]

Re: Bild in php darstellen

Joachim Mohr schrieb:
> Hallo,
>
> ich programmiere nur ganz gelegentlich in PHP.
> Manchmal möchte ich meine Seiten aber trotzdem ändern.
>
> Wenn ich einen Text ausgeben will schreibe ich:
> <?PHP
> $txt=file_get_contents("neu.txt");
> echo $txt;
> ?>
>
> Bei einem Bild schreibe ich in HTML:
>
> <img src="http://meinwww.de/bilder/bild.jpg" alt="meine Bild">
>
> Nachteil: beim zweiten Aufruf erscheint das Bild aus dem Cache,
> dabei hat es sich möglicherweise geändert.
>
> Deshalb würde ich gern schreiben:
>
> <?PHP
> $bild=file_get_contents("bild.jpg");
> echo $bild; //falsch!
> ?>
>
> Wie mache ich das richtig?
>
> MFG Joachim

Scheint doch nicht so einfach zu sein, ein Bild
ähnlich wie eine Textdatei durch echo darzustellen.

Ich kann natürlich den Benutzer darauf hinweisen, er
soll mit dem Kontextmenü des Browsers (rechte Maustaste)
die Seite neu laden bzw. aktualisieren.

Eigentlich nur HTML: Könnte ich den Besucher
auch durch einen Button dazu bewegen?

MFG Joachim




--
Joachim Mohr Tübingen
http://www.joachimmohr.de/neu.html
Joachim Mohr [ Di, 29 Januar 2008 10:03 ] [ ID #1919343 ]

Re: Bild in php darstellen

Joachim Mohr <jomolero [at] web.de> wrote:
> Scheint doch nicht so einfach zu sein, ein Bild
> ähnlich wie eine Textdatei durch echo darzustellen.

Doch. Ist nur um einiges langsamer als es den Server erledigen zu
lassen.


--
Web (en): http://www.no-spoon.de/ -*- Web (de): http://www.frell.de/
Stefan Scholl [ Di, 29 Januar 2008 11:03 ] [ ID #1919345 ]

Re: Bild in php darstellen

Joachim Mohr schrieb:
> Joachim Mohr schrieb:
>> Hallo,
>>
>> ich programmiere nur ganz gelegentlich in PHP.
>> Manchmal möchte ich meine Seiten aber trotzdem ändern.
>>
>> Wenn ich einen Text ausgeben will schreibe ich:
>> <?PHP
>> $txt=3Dfile_get_contents("neu.txt");
>> echo $txt;
>> ?>
>>
>> Bei einem Bild schreibe ich in HTML:
>>
>> <img src=3D"http://meinwww.de/bilder/bild.jpg" alt=3D"meine Bild">
>>
>> Nachteil: beim zweiten Aufruf erscheint das Bild aus dem Cache,
>> dabei hat es sich möglicherweise geändert.
>>
>> Deshalb würde ich gern schreiben:
>>
>> <?PHP
>> $bild=3Dfile_get_contents("bild.jpg");
>> echo $bild; //falsch!
>> ?>
>>
>> Wie mache ich das richtig?
>>
>> MFG Joachim
>
> Scheint doch nicht so einfach zu sein, ein Bild
> ähnlich wie eine Textdatei durch echo darzustellen.

Kann es sein das du ein Verstaendnisproblem hast oder woran hapert es?

Die Ausgabe eines Bildes aus einer HTML Seite heraus findet statt in dem =

auf das Bild referenziert wird. Dies ist ein neuer Request bei
welchem der Webserver einen Content-typ Header gemaesst dem Mimetyp des
Bildes sendet und anschliessend die Bilddatei. Das kann auch ein PHP
Script sein.

Den seltenen Fall wo die Bilddaten base64 codiert in der HTML Seite
eingebetet werden ignorieren wir mal.

> Ich kann natürlich den Benutzer darauf hinweisen, er
> soll mit dem Kontextmenü des Browsers (rechte Maustaste)
> die Seite neu laden bzw. aktualisieren.

Jedes Element innerhalb der Seite kann über HTTP Header das
Cacheverhalten vorgeben bzw. zumind. einen Vorschlag machen.

> Eigentlich nur HTML: Könnte ich den Besucher
> auch durch einen Button dazu bewegen?

Auch das waere Moeglich. Aber was hast du an den anderen Anworten nicht
verstanden?

Gruss
Joerg

--
TakeNet GmbH, Geschaeftsfuehrer Wolfgang Meier
97080 Wuerzburg Tel: +49 931 903-2243
Alfred-Nobel-Straße 20 Fax: +49 931 903-3025
HRB Wuerzburg 6940 http://www.takenet.de
Joerg Behrens [ Di, 29 Januar 2008 11:32 ] [ ID #1919346 ]

Re: Bild in php darstellen

Joachim Mohr schrieb:

> Wenn ich einen Text ausgeben will schreibe ich:
> $txt=file_get_contents("neu.txt");
> echo $txt;
>
> Bei einem Bild schreibe ich in HTML:
>
> <img src="http://meinwww.de/bilder/bild.jpg" alt="meine Bild">
>
> $bild=file_get_contents("bild.jpg");
> echo $bild; //falsch!
>
> Wie mache ich das richtig?

Du must Dir darüber bewust werden das Du ein Bild in HTML *NUR* über ein
<img ... /> Tag einbinden kannst. Es existiert zwar auch noch eine
andere Möglichkeit als base64 Source aber funktioniert nicht in allen
Browsern.

Defacto must Du den PHP-Code der dieses Bild aus Datei XYZ ausliest und
ausgibt in eine extra PHP-Datei auslagern. Diese wird dann wie das Bild
selbst über <img src="/img/meinbild.php" ... /> ins Html-Dokument
eingebunden.

In der PHP-Datei "/img/meinbild.php" könnte es dann wie folgt aussehen:

<?php

# Der Header muß an den Mimetype des Bildformats angepast werden und
# immer verschickt werden. (Sonst weis der Browser ja nicht was kommt
header ('Content-Type: image/jpeg');

# Jetzt folgen noch ein paar header die das Caching-Verhalten des
# Browsers entsprechend Deinen Vorstellungen beeinflussen sollen.

# Definieren das die Resource (Das Bild) zu einem weit zurück liegenden
# Zeitpunkt als Verfallen kennzeichnet
header ('Expires: Mon, 23 Jul 1993 05:00:00 GMT');

# Sagen das die Resource zum letzt möglichen Zeitpunkt modifiziert w.
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');

# HTTP 1.0 Caching des Browsers beeinflussen
header ('Pragma: no-cache');

# HTTP 1.1 Caching des Browsers beeinflussen
header ('Cache-Control: no-store, no-cache, must-revalidate');
header ('Cache-Control: post-check=0, pre-check=0', false);

# Jetzt die Bilddaten einlesen und direkt ausgeben
readfile ('./test.jpeg');

exit;

?>

Ich hoffe das hilft Deinen Vorstellungen zum Problem etwas auf die Sprünge.

MfG, Ulf
Ulf Kadner [ Di, 29 Januar 2008 14:07 ] [ ID #1919351 ]

Re: Bild in php darstellen

Ulf Kadner schrieb:
> readfile ('./test.jpeg');

Danke. Das war (für mich als Anfänger) hifreich.
Noch eine Frage: Warum nicht

readfile ('test.jpeg');

???

MFG Joachim


--
Joachim Mohr Tübingen
http://www.joachimmohr.de/neu.html
Joachim Mohr [ Di, 29 Januar 2008 19:03 ] [ ID #1919372 ]

Re: Bild in php darstellen

Joachim Mohr schrieb:
> Noch eine Frage: Warum nicht
>
> readfile ('test.jpeg');

Wie DU auf Deine Dateien zugreifst überlasse ich gern Deinem Geschmack. :-)

Solange sich dadurch keine Probleme ergeben ist alles OK. Ich
persöhnlich nutze z.B. ausschließlich absolute Pfade. Aber ich wollte
dich mit:

readfile (dirname(__FILE__).'/bild.jpeg');

nicht erst in weitere Fragen stürzen. Offensichtlich eine
Fehleinschätzung meinerseits.

MfG, Ulf
Ulf Kadner [ Di, 29 Januar 2008 20:15 ] [ ID #1919373 ]

Re: Bild in php darstellen

Ulf Kadner schrieb:

> Joachim Mohr schrieb:
>
>> Noch eine Frage: Warum nicht
>>
>> readfile ('test.jpeg');
>
> Wie DU auf Deine Dateien zugreifst überlasse ich gern Deinem Geschmack. :-)
>
> Solange sich dadurch keine Probleme ergeben ist alles OK. Ich
> persöhnlich nutze z.B. ausschließlich absolute Pfade.

Dein Beispiel, auf das sich Joachim bezog (und das Du sicherheitshalber
nicht mitgequotet hast), lautete:

>>> readfile ('./test.jpeg');

Ein absoluter Pfad sieht anders aus.

Gruß. Claus
Claus Reibenstein [ Di, 29 Januar 2008 23:19 ] [ ID #1919377 ]

Re: Bild in php darstellen

Claus Reibenstein schrieb:

> Dein Beispiel, auf das sich Joachim bezog (und das Du sicherheitshalber
> nicht mitgequotet hast), lautete:

sicherheitshalber? Ja ich weis was ich schrieb...

>>>> readfile ('./test.jpeg');
>
> Ein absoluter Pfad sieht anders aus.

Aha. Für wie blöd hälst Du mich? Bitte lies mein Posting nochmal
vieleicht verstehst Du ja doch noch was ich meine.
Ulf Kadner [ Mi, 30 Januar 2008 00:05 ] [ ID #1919382 ]

Re: Bild in php darstellen

Ulf Kadner schrieb:

> Claus Reibenstein schrieb:
>
>> Dein Beispiel, auf das sich Joachim bezog (und das Du sicherheitshalber
>> nicht mitgequotet hast), lautete:
>
> sicherheitshalber? Ja ich weis was ich schrieb...
^ ^^^^^

Und ich weiß, worauf ich antworte.

>>>>> readfile ('./test.jpeg');
>>
>> Ein absoluter Pfad sieht anders aus.
>
> Aha. Für wie blöd hälst Du mich?
^^^^^

Möchtest Du eine höfliche oder eine ehrliche Antwort?

> Bitte lies mein Posting nochmal
^
> vieleicht verstehst Du ja doch noch was ich meine.
^^^^^^^^^ ^

Wenn ich mir Deine Rechtschreibung und Zeichensetzung so anschaue, wohl
eher eine höfliche ...

Nein, ich weiß immer noch nicht, was Du meinst.

In Deinem Posting taucht an der fraglichen Stelle ein relativer Pfad
auf, der auf eine Datei im aktuellen Verzeichnis verweist. Daraufhin
fragte Joachim, warum Du nicht nur den Dateinamen benutzt, woraufhin Du
anfingst, mit absoluten Pfaden zu argumentieren.

Wo ist da der Zusammenhang?

Gruß. Claus
Claus Reibenstein [ Mi, 30 Januar 2008 18:06 ] [ ID #1920388 ]
PHP » de.comp.lang.php.misc » Bild in php darstellen

Vorheriges Thema: VIREN WARNUNG: Angriff auf php basierte WebAnwendungen (phprojekt)
Nächstes Thema: Bilderklau - Das Nutzen von .htaccess und PHP in Kombination?