Qik Stream
-
PHP prosta replikacja obrazków
No CommentsZnó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.

Recent Comments