[PHP] filemtime en clearstatcache

Pagina: 1
Acties:

Onderwerpen


  • BryanD
  • Registratie: September 2010
  • Laatst online: 09-11 14:56
Hallo mede-tweakerts.

Ik zit met een klein probleempje.
Voor mijn eind opdracht PHP (school) heb ik een systeem gebouwd dat incidenten bij houdt en verwerkt (topdesk online v0.1 zeg maar)

Ik ben redelijk bedreven (al zeg ik het zelf) in PHP en dus heb ik besloten om lekker uitgebreid bezig te gaan.
Ik heb dus in OOP een paar classes geschreven waaronder een Caching en Templating class.
Beide classes werken prima echter zit ik met één klein probleempje.

Ik maak vanuit verschillende template één grote file die gecached wordt. Echter kijkt het templating systeem elke keer dat het aangeroepen wordt of de verschillende losse templates ook aangepast zijn. Dit gebeurt door middel van de filemtime() functie in PHP. Vervolgens wordt aan de hand daarvan besloten of de cache gerefresht moet worden of dat het zo nog goed is. Nu was ik dit dus aan het testen en nu kwam ik er achter dat de resultaten van filemtime door PHP zelf al gecached worden. Dit houdt in dat ik dus geduurende een korte periode de oude resultaten behoudt van filemtime. Nu kwam ik er ook achter dat er een functie is die dit verhelpt genaamd clearstatcache().

Het probleem doet zich echter voor dat het LIJKT alsof de clearstatcache functie helemaal niets doet. De modified time van een bestand blijft ongeveer een minuut o.i.d. het zelfde. Echter wordt deze minuut gereset zodra er binnen die minuut gerefreshed wordt (daar lijkt het in ieder geval op).

Is er iemand die hier enige ervaring mee heeft of mij op weg kan helpen om dit toch op te lossen.
Ik begrijp namelijk niet waarom PHP zich zo gedraagt.

Ik zou zo niet weten wat voor code jullie wouden zien m.b.t. dit probleem. De enige regels die er betrekking to hebben zijn:
PHP:
1
2
3
4
<?php
clearstatcache(); // note ik heb clearstatcache(true) en clearstatcache(true, $template) ook al geprobeerd
$mtime = filemtime($template);
?>


Mochten jullie nog verder vragen hebben hoor ik het graag

  • Janoz
  • Registratie: Oktober 2000
  • Nu online

Janoz

Moderator Devschuur®

!litemod

Je implementeerd caching, maar vertraagt deze door bij elk request weer te kijken of alle bestanden veranderd zijn? Lijkt me een beetje tegen intuitief. Maar goed. Het zou heel goed kunnen zijn dat je nu te maken hebt met de eerste notitie op de manual page:
Note:

Note that time resolution may differ from one file system to another.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • BryanD
  • Registratie: September 2010
  • Laatst online: 09-11 14:56
Kortom, het lijkt er op dat het gewoon aan de instellingen van de PHP server ligt? Oke..naja niet veel aan te doen (staat op shared hosting).

En kijken of modified time veranderd is is toch nog altijd vele malen sneller als alle bestanden openen en te de inhoud er uit te halen.

edit: whoops! Bijna vergeten: Nog bedankt voor de reactie :)

[ Voor 10% gewijzigd door BryanD op 06-09-2012 16:10 ]


  • Tsjilp
  • Registratie: November 2002
  • Niet online

Tsjilp

RS[I]ds

Kun je niet beter op het moment van aanpassen de cache verwijderen? dan hoef je niet te checken op het moment dat de user de pagina opvraagt.

Raar... Is zo gek nog niet


  • curvemod
  • Registratie: Maart 2009
  • Laatst online: 02-12 14:31
Volgens mij moet je dit in de caching class zelf ergens 'onthouden' wanneer je voor het laatst de cache gebouwd hebt, niet op het moment dat je een template rendered. Misschien dat je daar checking in moet bouwen om te kijken of templates veranderd zijn (al zie ik het practisch nut niet echt).

  • Frash
  • Registratie: Mei 2002
  • Laatst online: 17:07
Gebruik je iets van opcode cachers? Die kunnen ook behoorlijk interfereren met bestandsoperaties. In je phpinfo() moet je kijken of er iets van XCache/eAccelerator/APC in staat.
Pagina: 1