Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Smarty - problem z cache'owaniem zdjęć
Forum PHP.pl > Forum > Gotowe rozwiązania > Systemy szablonów
thek
Witam. Natknąłem się na problem podczas update'u zdjęć. W panelu użytkownika daję możliwość wgrania na serwer kilku zdjęć. podczas wgrywania nadaję im kolejne numery począwszy od 0. Gdy usuwa się konkretne z nich system zmienia nazwę będących za nim na o 1 mniejszą. Wszystko wygląda OK ze strony serwera, ale niestety już nie od strony użytkownika. Następują bowiem przekłamania przeglądarki, czasem już w tym momencie, a czasem przy dodaniu nowego zdjęcia, zamiast nowego (konkretnie zamiast miniaturki nowego) widać bowiem miniaturkę starego (pliku i jego miniatury nie ma już fizycznie na serwerze, ale istnieje w cache'u przeglądarki uzytkownika). Po kliknięciu w nią wyświetla się prawidłowe zdjęcie, ale użtkownicy są zdezorientowani takim zachowaniem.
Dla mnie jest to dziwne, ponieważ już w sekcji meta wyraźnie dodaję
Kod
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Expires" content="0" />

Nie pomaga także czyszczenie pamięci cache szablonu na serwerze przy usuwaniu zdjęcia oraz jego dodawaniu:
Kod
$smarty -> clear_cache('plik.tpl');

Użytkownikowi nadal nie wyświetla prawidłowo zdjęć.
Ścieżki do zdjęć podawałem do tej pory jako adresy względne. Czy może mieć to wpływ na to, iż przeglądarka nie widzi zmian zachodzących podczas dodawania i usuwania zdjęc? Czy ktoś ma pomysł jak zmusić przeglądarkę do aktualizowania miniatur zdjęć. Zmieniłem adresy względne na bezwzględne przed chwilą, ale czy będzie to miało jakieś przełożenie na prawidłowe wyświetlanie miniatur, nie jestem przekonany. Choć znajomy mi to proponował, by przeglądarka niejako była zmuszana do sprawdzania czy zmieniło się coś. Na tę chwilę i po zmianie o jakiej wspomniałem odświeżenie następuje czasem, ale nie zawsze. A nie chcę zmuszać userów, by po każdym dodawaniu/usuwaniu zdjęć musieli robić "Force Refresh" przy uzyciu Ctrl+F5.
Może dodatkowo jeszcze wrzucić w sekcji head:
Kod
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">

? Nie chciałbym jednak przesadzić, bo przecież system szablonów mam po to, by przyspieszyć ładowanie strony, a nie wydłużac.

Z góry dziękuję za ewentualne wskazówki jak pozbyć się problemu.
nospor
moze troche poboczem tematu, ale:
Cytat
podczas wgrywania nadaję im kolejne numery począwszy od 0. Gdy usuwa się konkretne z nich system zmienia nazwę będących za nim na o 1 mniejszą

po co? Czemu dla danego obrazka zmieniasz ciagle numer? zazwyczaj id powinno byc stale na calym etapie zycia rekordu. Jakbys nie zmienial, nie mialbys problemu co teraz wlasnie masz winksmiley.jpg
thek
Zmienianie id zdjęcia istnieje by zachować ciągłość. Pierwsze zdjęcie użytkownika o nazwie 0.jpg jest jednocześnie jego avatarem/wizytówką, jeśli by je usunął (a może to zrobić), te znajdujące się za nim zostaną zdekrementowane i nie nastąpi sytuacja, że nagle istnieje pustka na tej pozycji, jak też dowolnej innej pomiedzy zdjęciami. Operowanie poza tym na ciągłym bloku danych jest łatwiejsze. Odnoszę się do katalogu i sprawdzam istnienie pliku począwszy od 0 wzwyż. Nieciągłość w takim wypadku przerwałaby mi sprawdzanie, co pominęłoby zdjęcia będące powyżej luki. Mógłbym wczytać zawartość katalogu pełną i posłużyć się pętlą foreach, ale przechowuje się w nim także inne pliki, więc sprawdzanie musiałbym wzbogacić o odpowiednie filtry, co nie wpłynie na wydajność zbyt dobrze. Zachowanie ciągłości nazw plików ten problem mi automatycznie niweluje. Dodam także, że takie rozwiązanie istniało zanim zająłem się serwisem (nie jestem jego twórcą) i zwyczajnie musiałbym przeanalizować całość pod kątem zmian i dokonać modyfikacji odpowiednich w wielu plikach.

Mam nadzieję, że wyjaśniłem dlaczego nazewnictwo plików 0.jpg, 1.jpg, itd., akurat chciałbym zachować w tej postaci, a ominąć problem błędu cache'owania przeglądarki, a raczej braku wykonywania odświeżenia zawartości, mimo obecności odpowiednich modyfikacji zarówno w systemie szablonu jak i odpowiedniego zapisu w sekcji head

PS.: Może nie napisałem wyraźnie. Informacje o zdjęciu nie są przechowywane w bazie czy gdziekolwiek indziej. Fotografia jest zwyczajnie kopiowana na serwer. Nadawanie zdjęciu losowych nazw sprawia, że użytkownik nie ma możliwości odpowiedniego kolejkowania, zaś tego chciałbym uniknąć. Przypisanie zaś mu stałej nazwy, przy usuwaniu wymusza na mnie jako programiście czuwanie nad wszelkimi możliwymi aspektami i sytuacjami, jak wspomniane automatyczne zastępowanie wizytówki/avatara, dbanie o wyświetlanie wszystkiego. System obecnie poza tym cache'owaniem działa prawidłowo. Po kliknięciu bowiem w miniaturę wyświetla się prawidłowy obraz z serwera. Jedynie miniatura jest błędna i to własnie chciałbym wyeliminować poprzez zmuszenie przeglądarki do zresetowania cache'u dla strony w przypadku akcji usunięcia pliku.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.