Cachování obrázků, porovnání a případaná invalidace cache
- MartinitCZ
- Člen | 580
Ahoj.
Řeším takový problém s obrázky.
Na své stránce mám tento obrázek (přesně tento odkaz):
http://media-mcw.cursecdn.com/…luesBeta.png Který občas
majitel updatne, jenže občas má problém se servery.
Zatím jsem to řešil tak, že jsem si obrázek uložil na svůj server a
občas ten link shlédl, no a v případě, že sem viděl změny na obrázku,
tak jsem ho updatnul na serveru.
Můj dotaz zní, jak to zautomatizovat.
Obrázek se automaticky zacachuje a vykreslího. Jednou za čas T vezme obrázek
na mém serveru a obrázek na té URL → porovná ho a když budou rozdílné,
tak vytvoří novou cache (nahradí starou).
Poradil by mi někdo, jak na to? Jak by jste postupovali (hlavně ta část s porovnáním)? Případně znáte lepší řešení?
- pave.kucera
- Člen | 122
K porovnání by mělo stačit jednoduché:
file_get_contents('http://path.to/external/image.jpg') === file_get_contents('local/image.jpg')
Ale je porovnávání nutné, nemůžeš linkovat přímo zdroj?
- MartyIX
- Člen | 217
pave.kucera: Paklize ten server s obrazkem uz ted je nestabilni, tak hotlinkovani nedava smysl.
- Ja bych pouzil CRON (doba T).
- Stahnout obrazek – zakladni idea:
martinit:
$url = "http://domain.tld/image.png";
$headers = get_headers($url, 1); // @TODO check return value
$content_length = intval($headers["Content-Length"]);
$content = file_get_contents($url);
if ($content === false) {
echo "Download - failed";
} elseif (strlen($content) !== $content_length) {
// Maybe the previous branch catch this case too.
echo "Size check - failed";
} else {
if ($content !== file_get_contents('local/image.jpg')) {
// store $content as local/image.jpg file
} else {
// files are the same
}
}