[php] caching probleempjes

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • megamuch
  • Registratie: Februari 2001
  • Laatst online: 08-12-2024

megamuch

Tring Tring!

Topicstarter
Beste tweakers,

Ik heb op dit moment een btje een probleem met het cachen van mijn websites.
Op dit moment heb ik alles draaien onder w2k met apache 1.28 en php 4.3.3

Op dit moment wordt bij elke hit elk plaatje opnieuw geladen. Dat is nogal irritant en volstrekt overbodig. De 'layout plaatjes' veranderen niet of nauwelijks. De overige plaatjes veranderen per pagina. (tis een fotoalbum).

Er zijn zo is uit mijn zoektocht gebleken een aantal manieren om caching te regelen. (zie o.a. http://www.mnot.net/cache_docs/)

1: via php.ini in de ini setting session.cache_limiter

De ini geeft de volgende omschrijving:
; Set to {nocache,private,public,} to determine HTTP caching aspects
; or leave this empty to avoid sending anti-caching headers.

mijn huidige setting is nocache

2 via mod_expire
Niet installed en volgens mij ook niet nodig

3. via header in php mee te zenden.

Goed. Ik gebruik sessies en alles werkt redelijk naar behoren. echter als ik mijn php ini setting verander naar <leeg> of public wordt alles op de pagina gecached, en zo dus ook de foto's. En dat laatste wil ik niet.

Nu even mijn vraag. Waar kan ik het beste de cache controls regelen? Is dat via de php ini, of juist in elke php file of misschien toch via mod_expire? en wat gebruiken jullie voor manieren om het optimale uit de mogelijkheden van 'caching' te halen?

p.s. ik weet dat caching ook clientside geregeld kan zijn, en dat je daar geen invloed op kan uitoefenen, je ziet nu elke keer de volledige pagina 'opbouwen' en dat is niet nodig.

ik hoop dat ik duidelijk ben geweest :) en ofcourse alvast bedankt voor de hulp.

Verstand van Voip? Ik heb een leuke baan voor je!


Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Even voor de duidelijkheid.. worden de plaatjes in kwestie door de PHP parser heengehaald? Anders is dit namelijk een Apache configuratie dingetje :) Kun je het anders niet als volgt doen; zet caching aan; en zet in de header van de PHP file die de plaatjes doorstuurd die je _niet_ wilt cachen ini_set('session.cache_limiter', false); :?

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • beetle71
  • Registratie: Februari 2003
  • Laatst online: 09-09 15:24
:? Snap ik het even allemaal niet?
Je wilt (statische) plaatje aan de serverkant gaan cachen?. En daarvoor gebruik je nocache :?

Serversite caching is alleen nodig als er voor bepaalde output (naar de client) elke keer een reeks script verwerkt moeten worden, of er plaatjes elke keer dynamisch gegenereerd worden terwijl de uitkomst(=output) (heel) vaak hetzelfde is.

Ik snap eigenlijk niet wat je wilt....

Acties:
  • 0 Henk 'm!

  • megamuch
  • Registratie: Februari 2001
  • Laatst online: 08-12-2024

megamuch

Tring Tring!

Topicstarter
ok.. wegens onduidelijkheid nogmaals:

Ik heb een pagina.. die pagina bevast een aantal gifjes enzo om het er allemaal een btje gezellig uit te laten zien. deze pagina heet "index.php" (als voorbeeld).

In het midden doe ik het volgende
code:
1
[img]"getdata.php?id=456789"[/img]


Getdata.php output een jpg naar de gebruiker. So far so good.

Bij elke aanroep van index.php worden al die leuke gifjes van de layout opnieuw gedownload. Terwijl die plaatjes dus helemaal niet veranderd zijn. Die gifjes moeten dus goed in de cache van de gebruiker (en eventueel tussenliggende proxies) terecht komen. Op dit moment wordt er dus helemaal niets gecached. Ik wil dat die gifjes dus WEL gecached worden.

Duidelijker zo hoop ik...
Spider.007 schreef op 06 februari 2004 @ 18:27:
Even voor de duidelijkheid.. worden de plaatjes in kwestie door de PHP parser heengehaald? Anders is dit namelijk een Apache configuratie dingetje :) Kun je het anders niet als volgt doen; zet caching aan; en zet in de header van de PHP file die de plaatjes doorstuurd die je _niet_ wilt cachen ini_set('session.cache_limiter', false); :?
Hmm dat ga is ff testen. En nee de plaatjes gaan niet door de parser heen. Het zijn gewoon statische plaatjes.

[ Voor 29% gewijzigd door megamuch op 06-02-2004 18:43 ]

Verstand van Voip? Ik heb een leuke baan voor je!


Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

megamuch schreef op 06 februari 2004 @ 18:42:
ok.. wegens onduidelijkheid nogmaals:

Ik heb een pagina.. die pagina bevast een aantal gifjes enzo om het er allemaal een btje gezellig uit te laten zien. deze pagina heet "index.php" (als voorbeeld).

In het midden doe ik het volgende
code:
1
[img]"getdata.php?id=456789"[/img]


Getdata.php output een jpg naar de gebruiker. So far so good.

Bij elke aanroep van index.php worden al die leuke gifjes van de layout opnieuw gedownload. Terwijl die plaatjes dus helemaal niet veranderd zijn. Die gifjes moeten dus goed in de cache van de gebruiker (en eventueel tussenliggende proxies) terecht komen. Op dit moment wordt er dus helemaal niets gecached. Ik wil dat die gifjes dus WEL gecached worden.

Duidelijker zo hoop ik...


[...]

Hmm dat ga is ff testen. En nee de plaatjes gaan niet door de parser heen. Het zijn gewoon statische plaatjes.
In het verhaal hierboven geef je aan dat ze wel door de parser heengaan :D Of geef je echt een location header terug vanuit getdata.php?

Eventueel kun je mijn pageCache functie gebruiken:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?PHP
function pageCache($howLong, $lastModifiedDate = NULL){
                if (!isset($howLong)) $howLong = "1 week";
                if (!isset($lastModifiedDate)) $lastModifiedDate = gmdate("D, d M Y H:i:s \G\M\T", strtotime("+".$howLong));

                header("Cache-Control: public");
                header("Pragma: cache");
                header("Expires: ".gmdate("D, d M Y H:i:s \G\M\T", strtotime("+".$howLong)));

                if (isset($_SERVER["HTTP_IF_MODIFIED_SINCE"]) && $_SERVER["HTTP_IF_MODIFIED_SINCE"] == $lastModifiedDate){
                        header("HTTP/1.0 304");
                        header("HTTP/1.1 304 Not Modified");
                        die;
                }
}
?>

Die kun je dan in getData.php opnemen; die kun je dan het beste aanroepen (voordat je de image doorgeeft) door als tweede argument de output van filemtime mee te geven :)

[ Voor 18% gewijzigd door Spider.007 op 06-02-2004 18:54 ]

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:38
Dude, hij heeft het erover dat de statische plaatjes niet gecached worden door de client. Lijkt me een Apache probje.

Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Skaah schreef op 07 februari 2004 @ 11:30:
Dude, hij heeft het erover dat de statische plaatjes niet gecached worden door de client. Lijkt me een Apache probje.
Dat is dus niet duidelijk; TS zegt ook
code:
1
[img]"getdata.php?id=456789"[/img]
.. Dat zijn dus waarschijnlijk geen statische plaatjes :) (Tenzij hij een location header verstuurd zoals ik ook al eerder vroeg)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate

Pagina: 1