Forum: PC-Programmierung PHP Caching für eine konkrete Seite abschalten


von D. I. (Gast)


Lesenswert?

Hi,
ich möchte das bei einem Skript bzw. Seite keine Bilder gecached werden 
sondern neu angefordert.

Ich habe das so versucht
1
header("Pragma: no-cache"); 
2
header("Cache-Control: no-store, no-cache, max-age=0, must-revalidate");

Das funktioniert aber nur sporadisch (also mal ja mal nein), gibts da 
eine andere Möglichkeit?

Der Hintergrund ist dass wenn dieses Skript aufgerufen wird ein Bild neu 
gezeichnet wird und der Browser soll das neu gezeichnete Bild laden und 
nicht das alte ausm Cache.

von Valentin B. (nitnelav) Benutzerseite


Lesenswert?

Du musst einen Meta-Tag mit "expires" hinzufügen.
Hier wirds erklärt:
http://de.selfhtml.org/html/kopfdaten/meta.htm

PHP ist zwar schön, aber nur auf dem Server.
Im Browser kommt immer noch das gute alte HTML an!

Mit freundlichen Grüßen,
Valentin Buck

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

D. I. schrieb:
> Der Hintergrund ist dass wenn dieses Skript aufgerufen wird ein Bild neu
> gezeichnet wird und der Browser soll das neu gezeichnete Bild laden und
> nicht das alte ausm Cache

mach aus:
1
img src = "meinbild.php"
einfach
1
img src = "meinbild.php?test=udhdcndfkfu48"
und lass bei den dem seitenladen test z.B. durch time() einen neuen Wert 
zuweisen. Dann denkt der Browser jedes mal das es sich um eine neues 
Bild handelt.

D. I. schrieb:
> Das funktioniert aber nur sporadisch

Das ist auch nur ein freundlicher Hinweis kein Zwang für den Browser ;)

Valentin Buck schrieb:
> Du musst einen Meta-Tag mit "expires" hinzufügen

Bei einem Bild schwerlich möglich...

von D. I. (Gast)


Lesenswert?

Läubi .. schrieb:
s alte ausm Cache
>
> mach aus:
>
1
img src = "meinbild.php"
> einfach
>
1
img src = "meinbild.php?test=udhdcndfkfu48"
> und lass bei den dem seitenladen test z.B. durch time() einen neuen Wert
> zuweisen. Dann denkt der Browser jedes mal das es sich um eine neues
> Bild handelt.

Also wenn das skript aufgerufen wird zeichnet der eine neue .png und 
diese wird dann im html aufgerufen, funktioniert das da genauso?

einfach
1
myscript.php?rand=blablubb

und im html ist halt dann
1
img src=meinbild.png

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Ist das HTML statisch oder wird das auch von PHP erzeugt?

Wenn per PHP erzeugt dann etwa so:
1
index.php:
2
<?php
3
... header und so ...
4
echo '<img src="meinbilderscript.php?rand='.time().'" alt="bliblablub">';
5
... der rest vom schützenfest....
6
?>
7
8
meinbilderscript.php:
9
<?
10
 ... Bilder mal code ...
11
?>

von D. I. (Gast)


Lesenswert?

Das html ist eine Smarty .tpl Template datei.

Da steht drin:

<img src="bild.png" />

Bevor das aber ausgeliefert wird zeichnet das PHP-Skript bild.png und 
ruft dann

$smarty->display(template.tpl)

als letztes auf, der bildname bleibt statisch

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Ich würde das Erzeugen des Bildes in einer extra PHP Datei machen (sonst 
kriegst du da eh Probleme, da du so das Bild nur neu zeichnest wenn du 
die HTML Datei neu aufrufst (was besonders bei gleichzeitigem Zugriff 
komische Effekte geben wird).

im Template kannst du dann schreiben:
1
<img src="bild.php?time={$smarty.now}" />

die bild.php sieht dan etwa so aus
1
<?php
2
header("Content-type: image/png");
3
header("Pragma: no-cache"); 
4
header("Cache-Control: no-store, no-cache, max-age=0, must-revalidate");
5
6
$img = imagecreatetruecolor(400, 200);
7
... Auf $img zeichnen ...
8
imagePng($img);
9
imagedestroy($img);
10
?>

von D. I. (Gast)


Lesenswert?

Ok danke für die Info

Ich hatte das jetzt so

<img src="bild.png?rand={time()}" />

das hat auch getan, aber danke für den tipp

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.