Caching af PHP-genereret CSS

This is a discussion on Caching af PHP-genereret CSS within the Produktion af websider ved brug af php (dk.edb.internet.webdesign.serverside.php) forum.

Caching af PHP-genereret CSS

Postby Martin Larsen on Wed Nov 12, 2008 2:23 pm

Hej gruppe

Jeg er ellers noget af en PHP haj, men det her volder mig godt nok
problemer! Et par timers googling har endnu ikke båret frugt.

Jeg har en PHP-generet CSS fil, dvs. en fil hvor indholdet
tilsyneladende er ren CSS, men det har lige været en tur forbi serveren
og modificeret via PHP. Det gør jeg i .htaccess, så filen udadtil stadig
hedder fx test.css. Og altså set fra browserens synspunkt burde være som
alle andre CSS filer.

Det virker da også fortrinligt, MEN .... filen bliver ikke cached.

Jeg har forsøgt med mindst 20 forskellige variationer over temaet:


Header("Cache-Control: must-revalidate");
$offset = 60 * 60 * 24 * 3;
$ExpStr = "Expires: " . gmdate("D, d M Y H:i:s", time() + $offset) . " GMT";
Header($ExpStr);


Desværre har intet af det virket. Jeg vil blive mægtig glad for at få at
vide hvad der skal til for at skidtet bliver cached.

Det er i øvrigt på en Apache server.

Hilsen
Martin
Martin Larsen
 
Posts: 60
Joined: Thu Jul 19, 2007 4:14 pm

Re: Caching af PHP-genereret CSS

Postby Dan Storm on Thu Nov 13, 2008 12:28 am

Martin Larsen skrev:
> Det virker da også fortrinligt, MEN .... filen bliver ikke cached.

Modificerer du den hver gang en bruger besøger siden?



--
Dan Storm - storm at err0r dot dk / http://err0r.dk/

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!
Dan Storm
 
Posts: 587
Joined: Sun Sep 12, 2004 10:47 am

Re: Caching af PHP-genereret CSS

Postby Carsten on Thu Nov 13, 2008 2:34 am

"Martin Larsen" skrev i en meddelelse
news:gffhfj$1e2u$1@newsbin.cybercity.dk...
> Jeg er ellers noget af en PHP haj, men det her volder mig godt nok
> problemer! Et par timers googling har endnu ikke båret frugt.
>
> Jeg har en PHP-generet CSS fil, dvs. en fil hvor indholdet tilsyneladende
> er ren CSS, men det har lige været en tur forbi serveren og modificeret
> via PHP. Det gør jeg i .htaccess, så filen udadtil stadig hedder fx
> test.css. Og altså set fra browserens synspunkt burde være som alle andre
> CSS filer.
>
> Det virker da også fortrinligt, MEN .... filen bliver ikke cached.

hmmm, det du siger er at ...

i klient-"programmet" (en html fil velsagtens) står der noget a la det her
??



Det får jo broseren til at fyre en GET request af mod din webserver .. lidt
som:

GET /text.css HTTP/1.1
host: www.yoursite.dk
If-Modified-Since: Sat, 29 Nov 2008 19:43:31 GMT (=det tidspunkt hvor
browseren sidst fik en "ny" text.css)
(more headers here)

Nu kigger din webserver så på den request og siger til sig selv... "Hmmm,
den text.css jeg har (lige autogenereret) er jo nyere end det som ham
browser-fætteren angiver, så jeg må hellere stikke ham en ny". Det er
grunden til at den ikke caches.

Nu ved jeg ikke om din "text.css" rent faktisk kan ændre sig fra sekund til
sekund, men jeg har tidligere haft samme problem med en "liste af kunder"
drop down og her valgte jeg en lidt anden løsning. Jeg lod serveren
autogenerere en ny liste, men førend jeg skrev den ned i "text.css" så
undersøgte jeg lige om den nye liste rent faktisk var forskellig fra den
forrige - hvis ikke så blev der ikke dannet en ny fil. Hvis den var ændret
blev der dannet en ny fil, og så ville browseren selvsagt få en ny.

Carsten


Carsten
 
Posts: 40
Joined: Tue Apr 25, 2006 1:16 am

Re: Caching af PHP-genereret CSS

Postby Martin Larsen on Thu Nov 13, 2008 8:15 am

Dan Storm wrote:

> Modificerer du den hver gang en bruger besøger siden?

Nej. Det er afhængig af browsertypen og modificeres altså ikke ved hver
request.

Martin
Martin Larsen
 
Posts: 60
Joined: Thu Jul 19, 2007 4:14 pm

Re: Caching af PHP-genereret CSS

Postby Stig Johansen on Thu Nov 13, 2008 12:13 pm

Martin Larsen wrote:

> Jeg har en PHP-generet CSS fil, dvs. en fil hvor indholdet
> tilsyneladende er ren CSS, men det har lige været en tur forbi serveren
> og modificeret via PHP. Det gør jeg i .htaccess, så filen udadtil stadig
> hedder fx test.css. Og altså set fra browserens synspunkt burde være som
> alle andre CSS filer.
>
> Det virker da også fortrinligt, MEN .... filen bliver ikke cached.
>
> Jeg har forsøgt med mindst 20 forskellige variationer over temaet:

Har du forsøgt at sætte en Last-Modified header?
Det er den sammenholdt med If-Modified-Since fra browseren, der styrer cache
eller ej.

(Eller E-tag i nogle situationer).

--
Med venlig hilsen
Stig Johansen
Stig Johansen
 
Posts: 63
Joined: Wed Mar 26, 2008 6:11 am

Re: Caching af PHP-genereret CSS

Postby Dan Storm on Thu Nov 13, 2008 1:53 pm

Martin Larsen skrev:
> Nej. Det er afhængig af browsertypen og modificeres altså ikke ved hver
> request.

Så det er altså for at imødekomme de forskellige browseres forskelligheder?

Hvis du gerne vil lave en PHP løsning på det, var det så ikke bedre at
lave de stylesheets du skal bruge:
if(eregi('msie', $_SERVER["HTTP_USER_AGENT"]))
$stylesheet = "ie-styles.css";
else
$stylesheet = "ff-styles.css";
?>





--
Dan Storm - storm at err0r dot dk / http://err0r.dk/

Tro ikke brugerne vil gøre noget for at undgå dit killfilter
- Så vigtig er du heller ikke!
Dan Storm
 
Posts: 587
Joined: Sun Sep 12, 2004 10:47 am

Re: Caching af PHP-genereret CSS

Postby Martin Larsen on Fri Nov 14, 2008 1:26 am

Dan Storm wrote:

> Så det er altså for at imødekomme de forskellige browseres forskelligheder?
>
> Hvis du gerne vil lave en PHP løsning på det, var det så ikke bedre at
> lave de stylesheets du skal bruge:


Jo, det er absolut også en løsning. Men af forskellige årsager er det
ikke ønskeligt her.

Desuden skal det også bruges til at andre php-genererede ting som vi
ønsker at cache. Fx Javascript.

Med andre ord ønsker jeg også at forstå i detaljer præcis hvordan
caching virker, eller rettere, hvordan browser og server i fællesskab
"aftaler" hvad der skal gøres :-)

martin
Martin Larsen
 
Posts: 60
Joined: Thu Jul 19, 2007 4:14 pm

Re: Caching af PHP-genereret CSS

Postby Martin Larsen on Fri Nov 14, 2008 1:29 am

Hej Carsten

> Nu kigger din webserver så på den request og siger til sig selv... "Hmmm,
> den text.css jeg har (lige autogenereret) er jo nyere end det som ham
> browser-fætteren angiver, så jeg må hellere stikke ham en ny". Det er
> grunden til at den ikke caches.

Jeg kan godt se hvad du mener, og det understøttes af hvad jeg ser i
Apaches logfil.

Når den dynamiske css fil fyres af, sendes en 200 OK tilbage til
browseren, sammen med indholdet. Mens når browseren beder om den
statiske css, så sender serveren en 304 Not Modified tilbage.

Der er dog stadig nogle ting jeg ikke helt kan greje, så når jeg har
analyseret lidt mere, vil jeg nok lige vende tilbage til tråden ;-)

Martin
Martin Larsen
 
Posts: 60
Joined: Thu Jul 19, 2007 4:14 pm

Re: Caching af PHP-genereret CSS

Postby Martin Larsen on Fri Nov 14, 2008 1:31 am

Stig Johansen wrote:

> Har du forsøgt at sætte en Last-Modified header?
> Det er den sammenholdt med If-Modified-Since fra browseren, der styrer cache
> eller ej.

Ja ...

> (Eller E-tag i nogle situationer).

Her er nok en del af svaret, for via min snifferproxy kan jeg se hvad de
taler om undervejs, server og browser. Og anden gang jeg beder om filen
(den almindelige, statiske) så sender browseren etag'en tilbage til
serveren sammen med Last-Modified osv.

Har dog ikke rigtig styr på hvordan jeg benytter mig af etaggen.

Martin
Martin Larsen
 
Posts: 60
Joined: Thu Jul 19, 2007 4:14 pm

Re: Caching af PHP-genereret CSS

Postby Stig Johansen on Fri Nov 14, 2008 3:26 am

Martin Larsen wrote:

> taler om undervejs, server og browser. Og anden gang jeg beder om filen
> (den almindelige, statiske) så sender browseren etag'en tilbage til
> serveren sammen med Last-Modified osv.

Lidt ude af context, men Proxytrace har vi brugt i lang tid til den slags
ting.

http://www.pocketsoap.com/

--
Med venlig hilsen
Stig Johansen
Stig Johansen
 
Posts: 63
Joined: Wed Mar 26, 2008 6:11 am


Return to Produktion af websider ved brug af php (dk.edb.internet.webdesign.serverside.php)

Who is online

Users browsing this forum: No registered users and 0 guests