Cachování obrázků, porovnání a případaná invalidace cache

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
MartinitCZ
Člen | 580
+
0
-

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
+
0
-

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
+
0
-

pave.kucera: Paklize ten server s obrazkem uz ted je nestabilni, tak hotlinkovani nedava smysl.

  1. Ja bych pouzil CRON (doba T).
  2. 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
		}
	}