Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno HTML/PHP - jak zakázat načítání obrázku z cache?

Zdravím vespolek,
řeším následující problém: na www stránce je obrázek, jako upoutávka na nějakou akci - akce.jpg. Tento obrázek se bude měnit, podle toho, jaká bude zrovna akce na nějaké zboží. Takže uživatel vždy přes FTP nahraje (přepíše) nový soubor akce.jpg.

Když ale nahraju přes FTP nový obrázek, zavřu prohlížeč, otevřu prohlížeč a znovu stránku zobrazím, stále tam je ten původní starý obrázek. Teprve po obnovení klávesou F5 se načte nový obrázek.

V hlavičce mám toto:

<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Cache-Control" content="no-cache" />
<meta http-equiv="Expires" content="-1" /> 

Zkoušel jsem ještě zobrazení obrázku upravit takto, aby URL adresa byla pokaždé jiná a abych tím donutil prohlížeč načíst nový obrázek:

echo "<img src=upload/akce.jpg\""."?dummy=".time()."\" width=\"600\" height=\"300\" alt=\"akce\" />";

Z toho se vygeneruje toto:

<img src="upload/akce.jpg?dummy=1392199872" width="600" height="300" alt="akce" />

Ale nepomohlo to. Žádám tedy o radu.

Děkuju.

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Takže problémy sú 2: kešuje sa stránka a kešuje sa obrázok. Oba problémy sa dajú vyriešiť správnym n… nový
los 12.02.2014 23:04
los
Děkuji všem zúčastněným za cenné rady a pomoc. Speciální poděkování losovi. :beer: Použil jsem násl… nový
host 13.02.2014 18:05
host
DOpourčil bych toto http://www.jakpsatweb.cz/clanky/caching-tutorial-c zech-translation.html nový
mnua.al 13.02.2014 19:38
mnua.al
Funguje tohle 2023 <?php header("Expires: Sat, 01 Jan 2000 00:00:00 GMT"); header("Last-Modified: "… nový
Vita Tano 24.05.2023 00:32
Vita Tano
Toto je zbytočný balast, ono funguje aj to z 2014. Ale čítanie pobavilo :) nový
pozorovateľ 24.05.2023 05:46
pozorovateľ
Není cachovaná i html stránka obsahující ten query string? nový
jamarom 24.05.2023 13:02
jamarom
Dotaz byl vyřešen v roce 2014... poslední
host 24.05.2023 13:06
host

Takže problémy sú 2: kešuje sa stránka a kešuje sa obrázok. Oba problémy sa dajú vyriešiť správnym nastavením HTTP hlavičiek. HTTP hlavičky majú prednosť pred ich ekvivalentami v HTML stránke. Navyše, hlavičky pre HTML stránku nijako neovplyvňujú kešovanie samotného obrázka.

Takže si pozri, aké HTTP hlavičky sa posielajú pre danú HTML stránku a uprav ich tak, aby posielali to, čo si dal do HTML (Pragma: no-cache, Cache-Control: no-cache). Z HTML to potom zmaž.

Pre obrázok stačí v podstate ten dummy parameter, ale zasa sa pripravíš o to, aby sa použila cache, keď sa obrázok nezmenil. Takže ak server generuje E-Tagy alebo Last-Modified hlavičky, tak to môžeš nechať aj bez toho parametra.

Děkuji všem zúčastněným za cenné rady a pomoc. Speciální poděkování losovi. :beer:

Použil jsem následující hlavičky:

header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // datum v minulosti

A zdá se, že to funguje přesně tak, jak jsem požadoval. Stačí přes FTP změnit obrázek, otevřít znovu prohlížeč a vždy se načte aktuální obrázek. Paráda..... Uf. :-)

Funguje tohle 2023

<?php
  header("Expires: Sat, 01 Jan 2000 00:00:00 GMT");
  header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
  header("Cache-Control: post-check=0, pre-check=0", false);
  header("Pragma: no-cache");
  header("Content-Type: text/html; charset=utf-8");
  Header("Set-Cookie: flavor=choco; SameSite=None; Secure");
?>

Zpět do poradny Odpovědět na původní otázku Nahoru