Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Odświeżanie plików css/js
Forum PHP.pl > Forum > Po stronie przeglądarki
ujex
Sprawa wygląda tak:
w domenie głównej mam sobie stronę, pliki css i js trzymam na innym serwerze i w innej subdomenie.
Teraz jak coś zmieniam w plikach css to na stronce plik się nie odświeża do czasu aż wcisnę ctrl+f5, tak jakby przeglądarka nie wiedziała, że plik się zmienił....
Jak mam to zrobić, żeby ludziom ładowały się nowe style po każdej mojej zmianie w plikach?
Dodam jeszcze, że pliki css i js trzymam w tej subdomenie statycznie, nie są generowane przez żadne skrypty.
erix
Cytat
Dodam jeszcze, że pliki css i js trzymam w tej subdomenie statycznie, nie są generowane przez żadne skrypty.

Dopisuj losowy ciąg znaków w query string.
Nh2003
Losowy ciąg znaków to złe rozwiązanie - za każdym razem przeglądarka będzie na nowo wczytywać plik css. Dużo lepszym rozwiązaniem jest dopisywanie czasu modyfikacji pliku. No chyba że mówisz o ręcznym wpisywaniu losowej wartości po każdej edycji pliku css.
ujex
Zmiana nazwy pliku nie wchodzi raczej w grę, tak naprawdę to kilka serwisów korzysta z tych styli.....
Musiałbym to w wielu miejscach zmieniać, tak robię właśnie teraz ale jest to kłopotliwe i dlatego szukam innego rozwiązania.
devnul
@ujex: nikt tu nie mówi o zmianie nazwy pliku, jak masz plik który nazywa się np style.css to zamiast sładni
  1. <link rel="stylesheet" href="style.css" type="text/css" />

używasz np takiej
  1. <link rel="stylesheet" href="style.css?12345678" type="text/css" />

gdzie 12345678 to aktualny timestamp dla daty modyfikacji pliku możesz go uzysjać przez funkcję filemtime dzięki temu przeglądarka automatycnzie pobierze nową wersję styli/skryptu po zmianie bo przez nią taki plik będzie uznany za nowy
ujex
Wiem o co wam chodzi, może ja się nie jasno wypowiadam...
Twoje rozwiązanie jest złe, ba jak już kolega wcześniej zauważył.....
Cytat
Losowy ciąg znaków to złe rozwiązanie - za każdym razem przeglądarka będzie na nowo wczytywać plik css.

a mi chodzi tylko o to, żeby pobierała plik w momencie kiedy ja w nim wykonam zmianę....
devnul
Cytat
a mi chodzi tylko o to, żeby pobierała plik w momencie kiedy ja w nim wykonam zmianę....
przeczytaj mojego posta oczko wyżej, jak chwilę pomyślisz to zobaczysz że to rozwiązanie będzie działało dokładnie tak jak chcesz
ujex
Cytat z mojego pierwszego posta:
Cytat
w domenie głównej mam sobie stronę, pliki css i js trzymam na innym serwerze i w innej subdomenie.
devnul
cache control i etag
sniver
ja zawsze dopisuje do pliku np. style.css parametr reload=1

czyli style.css?reload=1
i jak pozmieniam to ręcznie zmieniam na kolejną liczbę biggrin.gif
krowal
Najlepiej chyba dopisać z automatu datę modyfikacji tego pliku w formacie unixowym. style.css?1234123

Po każdej modyfikacji się zmienia i nic nie trzeba ręcznie robić bo przecież można tą datę wyciągnąć z pliku za pomocą PHP smile.gif
devnul
@krowal: 6 postów wyżej...
konrados
Dołączę się, bo mam podobny problem, a wygląda na to, że nie zrozumieliście smile.gif

Cytat
pliki css i js trzymam na innym serwerze i w innej subdomenie.

Zmiana nazwy pliku nie wchodzi raczej w grę, tak naprawdę to kilka serwisów korzysta z tych styli


Nie da się przecież pobrać daty modyfik. pliku, który znajduje się w innej domenie.

A jako, że dany plik css/js jest używany przez np. 100 innych stron, to też modyfikacja losowej wartości na tych stronach (za każdym razem, gdy zmienimy dany plik js/css) nie wchodzi w rachubę.

Przydałby się więc jakś odpowiedni string w funkcji php header() który mówi: data modyfikacji jest taka a siaka, ściągnij ten plik, jeśli jest nowsza niż w cachu.

Swego czasu dużo czytałem o tym i prostego rozwiązania nie znalazłem, co mi się wydaje dość dziwne. Pewnie źle szukałem.
erix
Cytat
Nie da się przecież pobrać daty modyfik. pliku, który znajduje się w innej domenie.

Ekhm, a get_headers, to co?

Cytat
Przydałby się więc jakś odpowiedni string w funkcji php header() który mówi: data modyfikacji jest taka a siaka, ściągnij ten plik, jeśli jest nowsza niż w cachu.

manual dla get_headers nawet:
Cytat
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
devnul
@erix: w sensie stricte że rozwiązanie jest się jak najbardziej zgadzam ale uważam że nie jest to najszczęśliwsze wykorzystanie - każdorazowe odpytanie zdalnego serwera o nagłówki jednego lub więcej plików może dać spory narzut czasowy, dlatego też uważam że dobrze zbudowane nagłówki po stronie zdalnego serwera w zupełności wystarczą
konrados
@devnul

Ja rozumiem, i nawet używam, o takie coś robię:

  1. $headerLastMod = gmdate("F d Y H:i:s T", getlastmod());
  2. header("Last-Modified: $headerLastMod");
;

Niestety gdy używam firebuga by pokazać co się dzieje (w zakładce sieć) to okazuje się, że czasem ściąga czasem nie (!). By być pewnym, że format jest prawidłowy etc robię nawet dla testów ręcznie:

  1. header ("Last-Modified: Mon, 15 Feb 2010 23:30:12 GMT");


Wynik ten sam. Próbowałem też z "Date:" i "Expires:". Wynik ten sam - raz sobie ff ściągnie raz nie.
devnul
temat jest obszerny ale jakbyś przegooglał się przez podstawowe pojęcia to dotarłbyś do tego - dalej już z górki. Poza tym możesz dobrze skonfigurować apacha i zrobi wszystko sam - doda odpowiednie nagłówki, ustawi czas modyfikacji i wygaśnięcia, skompresuje itp ale ograniczenie się do przekopiowania bez myślenie przykładów znalezionych w necie jest raczej kiepskim pomysłem tym bardziej jeśli bierzemy pierwszy wypluty przez google przykład
konrados
Dzięki, spojrzę.

Właśnie jak ostatnio interesowałem się tym tematem, to też skończyłem na jakiejś stronie, która po wydrukowaniu byłaby grubsza niż encyclopedia britannica smile.gif Dlatego jakoś tak zrezygnowałem.
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-2025 Invision Power Services, Inc.