webForumDet fria alternativet

Få bildern att uppdateras

PHP

7 svar · 299 visningar · startad av micke.prag

Medlem sedan maj 20039 inlägg
Frågan#1

Jag har en bild på min server som uppdateras ganska ofta. Problemet är att när folk går in på samma sida flera gånger så uppdateras inte bilden eftersom deras cashade bild visas. Hur kan man göra så att webbläsaren alltid hämtar bilden från servern och inte använder sig av sin gamla nerladdade version? Eller är detta ett html-probem?

Medlem sedan aug. 20002 975 inlägg
#2

Testa att lägga följande överst på sidan:

<?php  
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");

Det hindrar sidan från att cachas, förhoppningsvis gäller det bilden också.

Medlem sedan okt. 2001538 inlägg
#3

Läste för en tid sedan ett inlägg på php.net om hur man kunde undvika att en bild cache:ades...
Föregående inlägg kanske är mer effektivt, det vet jag inte men tänkte att jag kunde bidraga med den lösningen med:

echo ("<img src=\"blah.gif?".rand(1,999)."\" width=\"100\" height=\"100\">");

Tanken är väl att bilden varje gång får en liten svans med ett random-tal efter sig.

Har inte testat det själv, men hade tänkt använda mig utav denna lösning i framtiden om behovet uppstod.

MVH Patrik

Medlem sedan maj 20039 inlägg
#4

Jag löste det så här:

showpic.php:

<?
Header("Content-type: image/jpeg");
Header("Cache-Control: no-cache, must-revalidate");
Header("Pragma: no-cache");

ImageJpeg(ImageCreateFromJpeg($_GET['path']));
?>

Så är det bara att skriva i html-sidan:
<img src="showpic.php?path=minbild.jpg">

Scriptet funkar ju bara för jpg eftersom det bara är det jag kommer att använda det till men det går ju lätt att göra så att det bara öppnar filen och skickar inehållet oavsett vad det är i.

Medlem sedan maj 20039 inlägg
#5

Nu har jag motsatta problemet. Jag har gjort en sökning via ett formulär med POST. Trycker man sedan bakåt i webbläsaren så står det bara "page has expired".
Kan man då göra så att webbläsaren cachar sökresultatsidan och på så sätt lösa problemet?

Medlem sedan juli 2002630 inlägg
#6

<?
echo "<img src=\"elvis.jpg?timestamp=" . microtime() . "\">";
?>
löser cacheproblemet. Att min snygga kodsnutt inte kanske är syntaxmässigt korrekt är en annan femma :)

Medlem sedan maj 20039 inlägg
#7

Du förstod mig nog fel. Din kod gör ju så att bilden inte cachas (eller iallfall alltid hämtas en ny). Det är inte det jag vill. Jag VILL att sidan ska cashas. Om du går via POST till en sida och följer en länk därifrån till en annan sida och sedan trycker bakåt, så funkar inte det.

Medlem sedan aug. 20002 975 inlägg
#8

Om du istället gör din sökning med method="get", gör det någon skillnad ?

För din tests skull kan du lägga följande överst på sidan så du slipper skriva om den:

<?php

$_POST = $_GET;
260 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)