PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : png auf keinen fall cachen



moedule
28-02-2005, 02:54
hey

wie kann man verhindern das bilder gecached werden?
ich hab ein kleines php-script geschrieben und mit mozilla ist es auch kein problem mittels

<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">

auch ohne probleme verhindert werden, daß das alte bild (eben nicht das neu erstellte) geladen wird

mit anderen browsern (explorer z.B., alte netscapes, ..) ist das aber nicht der fall

kann man bei einem bild auch noch mal explizit angeben das es nicht aus dem cahce gezogen werden soll?

moe

BlueJay
28-02-2005, 09:05
kann man bei einem bild auch noch mal explizit angeben das es nicht aus dem cahce gezogen werden soll?

Ja, in den jeweiligen Browser settings :)
Warum willst du das Caching verhindern?

so long,
BlueJay

msi
28-02-2005, 14:52
Ja, in den jeweiligen Browser settings :)
Warum willst du das Caching verhindern?

so long,
BlueJay

weil das bild dynamisches erzeugt wird nehm ich an

nEox
28-02-2005, 19:52
du kannst zusätzlich noch mittels PHP(oder eine andere Scriptsprache) einen Header ausgeben:


<?php
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Datum aus Vergangenheit
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
// immer geändert
header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache"); // HTTP/1.0
?>

Siehe http://de.php.net/header

Wenn du kein PHP zur Verfügung hast kannst du auch andere Scriptsprachen verwenden. Einfach mal in google nach "header +no-cache" +evtl. bevorzugte Scriptsprache suchen.

Grüße

nEox

nEox
28-02-2005, 19:55
achso, falls du wirklich nur dieses eine Bild cachen willst kanst du auch eine zufällige Zahl übergeben.

Z. B. mit PHP:


<img src="bildname.endung?<?=time();?>">

wobei <?=time();?> die zufällige Übergabe ist.


*edit*
ok time() ist nicht wirklich "zufällig" aber es erfüllt seinen Zweck.

Grüße

nEox

moedule
28-02-2005, 22:22
Ja, in den jeweiligen Browser settings :)
Warum willst du das Caching verhindern?


an die komme ich natürlich nicht dran (an die browser settings)
ist ein dynamisch erzeugtes bild


ich denke ich werd einfach noch wie beschrieben noch mehr in die header reinpacken (vorallem das mit dem vergangenen datum)

moe

BlueJay
01-03-2005, 08:58
ich denke ich werd einfach noch wie beschrieben noch mehr in die header reinpacken (vorallem das mit dem vergangenen datum)

Nimm lieber die Variante mit dem neuen Bildnamen, der Cache kann bei Bildern hartnäckig sein.

Gibt es eine Möglichkeit, die Bilder vorzuladen? Ist deren Aussehen vorher festlegbar? Kann man sie in Blöcke zerlegen und wieder zusammenpuzzlen, um an das aktuelle Bild zu kommen?
Jede der oben angegebenen Möglichkeiten bietet Lösungsstrategien, bei denen der Cache erst mal wurscht ist, möglicherweise sogar ganz nützlich.
Daher die Zusatzfrage.

so long,
BlueJay

moedule
01-03-2005, 21:38
variante neuer bildnamen ... ok

mal ganz doof gefragt (ich mach php wirklich nur so dass es halt funktioniert, hab da kaum ne ahnung von):
darf denn ein php programm ein beliebiges file erstellen? (schreibrechte) oder ist da meine herangehensweise sowieso komplett falsch

zur zeit:
php-script ruft externes programm auf, das erstellt bild und speichert das in diesem verzeichniss als bild.png ab (z.B.) (dieser bild datei hab ich vorher lese und schreibrechte gegeben, sodaß es geschrieben werden kann)
und dann übergibt mein php-script einfach diesen dateinamen (<img src="bild.png" ...> )

moe

nEox
01-03-2005, 22:13
hallo,

in dem Fall kannst du auch das PHP-Skript direkt als Source-Pfad angeben.
D.h.:


<img src="phpdatei.php?<?=time()?>">

In der "phpdatei.php" muss dann das Bild erstellt werden(ist ja zur Zeit auch schon so). Dann musst du das Bild einfach ausgeben.

Damit der Browser auch kapiert das er ein Bild anzeigen soll und keine PHP-Datei muss noch ein anderer Header mitgegeben werden:



header ("HTTP/1.1 200 OK", true);
header ("Date: ". gmdate("D, d M Y H:i:s GTM"), true);
header ("Server: Apache/1.3.27", true);
header ("Accept-Ranges: bytes", true);
header ("Content-Type: image/jpeg", true);


Das Ganze gibts hier nochmal erklärt:
http://www.drweb.de/php/icons_dynamisch.shtml

Ein Problem könnte die Serverperformance werden(da bei jedem Aufruf ein Bild berechnet werden muss) wenn sehr viele Zugriffe auf die Seite stattfinden.
Dann könntest du das Bild zwischenspeichern und in dem Skript dann entscheiden ob das zwischengespeicherte Bild genommen werden soll oder ein neues generiert werden soll. ( Im Pinzip kann man das dann per "if(file_exists("tempbild.bild")) // bild ausgeben else //berechne" machen )

Grüße

nEox

PS: So werden häufig auch die ganzen Werbebanner erstellt, nur das dann außer dem Erstellen des Bildes auch gleich noch ein Datenbankeintrag hochgezählt wird. Dem Skript kann man auch noch weitere Variablen mitgeben (<img src="phpdatei.php?zeige=123">). Hier kann dann das Skript entscheiden welches Bild der User genau sehen soll.

nEox
01-03-2005, 22:25
@BlueJay

also um Bilder vorzuladen kann man Sie z.B. per <img src="bildname" height="0" width=""> auf einer vorhergeheneden (z. B. Intro-)Seite laden.

Das Gleiche geht auch mit Javascript.



<script type="text/javascript" language="JavaScript">
<!--
bild = new Image();
bild.src = "bildpfad";
//-->
</script>


Allerdings bringt das wenig wenn in den Browsereinstellungen das Caching deaktiviert wurde.

Im Netz finden sich aber auch einige solcher Skripte die sogar mit Ladebalken Grafiken vorladen. Ob eine Seite die sowas braucht wirklich sinnvoll ist, ist ne andere Frage :)

Grüße

nEox

BlueJay
02-03-2005, 18:54
@BlueJay
(Bilder vorladen)
Das Gleiche geht auch mit Javascript.

Genau das wäre einer meiner Vorschläge gewesen, wenn die Bilder schon irgendwo fertig rumliegen.



Allerdings bringt das wenig wenn in den Browsereinstellungen das Caching deaktiviert wurde.

Deshalb bitte ich in regelmäßigen Abständen immer ganz lieb, diesen zu reaktivieren.

moedule sollte so was nur recht sein.



Im Netz finden sich aber auch einige solcher Skripte die sogar mit Ladebalken Grafiken vorladen. Ob eine Seite die sowas braucht wirklich sinnvoll ist, ist ne andere Frage :)


Den Ladebalken? Bei lahmen Leitungen schon mal nötig.
Und ob Seiten, die Bilder vorladen, sinnvoll sind?
Chaqu'un a son gout! :rolleyes: :p :D

so long,
BlueJay

moedule
02-03-2005, 19:49
Den Ladebalken? Bei lahmen Leitungen schon mal nötig.
Und ob Seiten, die Bilder vorladen, sinnvoll sind?
Chaqu'un a son gout! :rolleyes: :p :D


ladebalken halte ich eher nicht für sinnvoll, naja jeder wie er mag

das bild wird ja nicht direkt vom php-script erstellt, sondern von gnuplot

es dreht sich bei mir auch nur um ein einziges bild, es geht auch nicht um geschwindigkeit, ist im rpinzip gerade wurscht, aber es darf halt nicht immer erst der reload-button gedrückt werden müssen

ich hab sjetzt aber mit den header.geschichten gemacht und damit scheint es ganz gut zu funktionieren

moe