PHP prosta replikacja obrazków

Znów potrzeba okazaÅ‚a siÄ™ matkÄ… wynalazku. Jest sobie site o dość dużym obciążeniu. PadÅ‚o hasÅ‚o – robimy klaster. Wszystko piÄ™knie, Å‚adnie, baza siÄ™ replikuje, ale problem z obrazkami. Jak zrobić replikacjÄ™ plików ze zdjÄ™ciami bez mocnego ingerowania w kod panelu administracyjnego?

Rozwiązanie jest proste, nie wymaga w ogóle dotykania się do kodu aplikacji, wystarcza mała łatka na .htaccess + jeden dodatkowy plik w PHP.

.htaccess:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /mirror.php [L]

mirror.php:

$site = 'http://tu_adres_serwera_master.tld';
$file = $_SERVER['REQUEST_URI'];
$content = @file_get_contents($site.$file);
if($content === false)
{
die('File missing!');
}
$localfile = preg_replace('/\.{2,}/','.','.'.$file);
@mkdir(dirname($localfile),0700,true);
file_put_contents('.'.$file, $content);
header('Location: http://'.$_SERVER['HTTP_HOST'].$_SERVER['REDIRECT_URL']);
?>

Zmiany te wprowadzamy na slave-hostach. Panel administracyjny pozostaje tylko na master-hoście.
Jeśli na slave plik nie zostanie znaleziony, mod_rewrite przekieruje wywołanie na mirror.php który pobierze plik, wrzuci w odpowiednie miejsce i przekieruje przeglądarkę na już gotowy, poprawny adres.
Do tego raz na dobę pełna replikacja rsync-em i śmiga.