PHP Cachingsclasse

Door Wim Mari, 20 jaar geleden, 4.847x bekeken

Benodigdheden:
1 directory met read & write access (standaard "cache"). Deze directory kan aangepast worden door de classe zo op te roepen:
$cache = new cache('DIRECTORY');
PHP 5 (however, met kleine aanpassingen werkt het ook met PHP4, enkel de public, private en protected dingen weghalen!)

Als 'cache' een goede dir is, kan je de classe gewoon aanroepen:
$cache = new cache();

De classe werkt eigenlijk redelijk automatisch. Vanaf het bestand <dir>/FILE.cache bestaat, zal hij het uitlezen en de pagina sluiten. Anders zal de classe alle output opnemen, en deze uiteindelijk naar <dir>/FILE.class wegschrijven, zodat deze volgende keer uitgelezen kan worden.

Als de output bewerkt is (bvb nieuwe forumreactie), verwijder je -bij de update van de database- gewoon het desbetreffende .cache-bestand!

Oproepen met:
$cache = new cache('CACHE DIRECTORY');

Voorbeeldje:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
require_once('cache.class.php');
$cache = new cache();

$cache->start('index');

echo ('Welkom op mijn homepage!')

echo $cache->write();
// ./cache/index.cache bevat nu "Welkom op mijn homepage!", en zal vanaf de 2de keer uitgelezen worden.   Uiteraard heeft het geen performantie verschil bij enkel echo's zonder berekeningen!
?>


Voorbeeldje met templatepower: (mijn index.php)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
require_once('cache.class.php');
$cache = new cache();

$cache->start('index');

$tpl->assignInclude('content', 'txt/index.tpl');

$tpl->prepare();

$tpl->printToScreen();

echo $cache->write();
?>


Een bestand verwijderen kan met:
$cache->deleteCache('index'); //index staat voor de filename natuulrijk
Dit is eigenlijk gewoon een alias voor de (php) functie UNLINK, maar unlink is redelijk onbekend imo

Het script kan natuurlijk uitgebreid worden naar je eigen wensen voor je eigen website,
Plezier ermee!

Voorbeeld: http://www.gdx.be/

Gesponsorde koppelingen

PHP script bestanden

  1. php-cachingsclasse

 

Er zijn 16 reacties op 'Php cachingsclasse'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Niek s
niek s
20 jaar geleden
 
0 +1 -0 -1
Ik vind vooral da plaatje met "To cool for IE" leuk :P
Wim Mari
Wim Mari
20 jaar geleden
 
0 +1 -0 -1
Spread the word; en zet het ook op je eigen website.

Deze website was trouwens een schoolopdracht (moest totaal niet dynamisch zijn), dus de inhoud is maar wat gebrabbel.

1 nadeel: de lerares is redelijk pro-microsoft, en ik redelijk anti-microsoft (100% ms free, Too cool for IE, Download Firefox, ...)
Niek s
niek s
20 jaar geleden
 
0 +1 -0 -1
lol =P

Wie is er nou weer pro-messiesoft :P

100% anti microsoft = ik!
net als
100% hardcore :P

Maar 100% anti-ms betekent dus dat jij ook Linux/Unix/Mac draait? :)
Wim Mari
Wim Mari
20 jaar geleden
 
0 +1 -0 -1
Kubuntu 7.04 jup :)

en op m'n servertje draai ik Debian 3.1, maar dat wordt een 4.0


De website is trouwens 100% MS free, mijn pc helaas niet. Heb een legale windows vista business van m'n school gekregen, en die gebruik ik dus (voor games). Een office staat er ook op (openoffice), en winamp & vlc als media players....

Meer games en developer tools (programmeeromgevingen, designprogrammas zoals adobe creative suite, ...) moeten ook naar linux gaan -moet absoluut niet opensource of gratis zijn-, zodat mensen een keuze hebben welk os ze gebruiken!
Jorik
Jorik
20 jaar geleden
 
0 +1 -0 -1
Dan ben je dus niet 100% MS-free. Aangezien je ook Vista draait.
Wim Mari
Wim Mari
20 jaar geleden
 
0 +1 -0 -1
true, maar die website wel

Ik citeer mezelf: "De website is trouwens 100% MS free, mijn pc helaas niet."
GaMer B
GaMer B
20 jaar geleden
 
0 +1 -0 -1
Zullen we weer even ontopic gaan, genoeg Anti-Messiesoft voor nu :)

Over de script:
Het zal ooit wel van pas komen, maar ik ga het nu nog niet gebruiken op mijn site...
Hipska BE
Hipska BE
20 jaar geleden
 
0 +1 -0 -1
je voorbeeld is mij niet echt duidelijk.

Ach heb nog eens je inleidende tekts gelezen en snap het nu wel.
Dus als het bestand nog niet bestaat, maakt hij de cache aan.
Als het bestand wel al bestaat leest hij gewoon het bestand.

Maar jij zegt dan ook, heb je updates ofzo gedaan dan moet je dat cache bestand maar wissen. Je toont geen voorbeeld met $cache->deleteCache();

Kun je misschien een functie toevoegen $cache->updateCache($file); deletecache hoef je dan niet meer toe te passen.

Dit is een goed script voor heel druk bezochte site's
Ook Tweakers.net gebruiken server-side-caching.
Wim Mari
Wim Mari
20 jaar geleden
 
0 +1 -0 -1
om bvb ./cache/index.cache te verwijderen (om het voorbeeld te volgen), gebruik je het gewoon zo:

$cache->deleteCache('index');


20 jaar geleden
 
0 +1 -0 -1
je kijkt of het cach bestand bestaad; is het dan ook niet hadig om te kijken hoe oud het is? en als het bijv ouder dan een uur is het te updaten / te verwijderen?

Je kan dat in een database(bestand) zetten of kijken met de functie:
filemtime(); http://nl3.php.net/manual/nl/function.filemtime.php
(kan ook filectime(); fileatime ();)
Wim Mari
Wim Mari
20 jaar geleden
 
0 +1 -0 -1
Ik controleer idd of een cachebestand bestaaT, maar het is imo niet nodig om dit elk uur te controleren aangezien er niet persee elk uur een update moet zijn. Je bent dan ook met cronjobs etc bezig wat voor een iets moeilijkere implentatie/update zorgt. Wil je geen cronjob dan moet je nog steeds bij elke view controleren of het bestand bestaat.

Zolang er geen update gebeurd, moet een cache bestand ook niet updaten, ook al staat het er al 2 jaar ongewijzigd.


Het is dus wel de bedoeling dat telkens als er een gastenboek reactie oid gepost wordt, dat je het cachebestand verwijderd!!
Jelmer -
Jelmer -
20 jaar geleden
 
0 +1 -0 -1
Quote:
Zolang er geen update gebeurd, moet een cache bestand ook niet updaten, ook al staat het er al 2 jaar ongewijzigd.

En toch kan ik het je aanraden om cachebestanden maar een beperkte levensduur te geven. Mocht er dan iets mis gaan, bijvoorbeeld door een programmeerfout ergens waarbij je vergeet het cache-bestand in een bepaalde situatie te wissen, dan wordt dit alsnog goed gedaan. Weliswaar wat later, maar toch.
Wim Mari
Wim Mari
20 jaar geleden
 
0 +1 -0 -1
momenteel doe ik het bij mijn eigen website niet. Wel heb ik onderaan op elke pagina staan "Cached on ....".

BTW: Ik ga voor die delete/uur trouwens geen controle in mijn script inbouwen. Het gaat meer nadelen (langere laadtijd, en dit script heeft net de bedoeling om de laadtijd zo laag mogelijk te houden) dan voordelen (enigste voordeel: er moest maar eens iets fout gaan, wat normaal niet gaat gebeuren.....).

Als je het toch wilt, wat opzich wel goed is, raad ik je aan dit zelf met .htaccess te maken.

Je kan dan het volgende scriptje gebruiken om ALLE cache te legen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
if($_REQUEST['key'] == 'sleutel')
{

    $dir = opendir('./cache/');
    while ($file == readdir($dir))
    {

        if($file != '.' AND $file != '..')
            unlink('./cache./'.$file);
    }

    
    echo ('cache cleared!');
}

else
{
echo <<ENDFORM
<form method="post">
<
input type="text" name="key" /><input type="submit" name="deleteCache" value="OK!" />
<
/form>
ENDFORM;
}

?>


of er naar toe surfen en "sleutel" invoeren in het textfield, of naar ?key=sleutel surfen (beide werken, de 2de kan met cronjobs gebruikt worden)

Mocht je het vaak handmatig gebruiken is het mss ook handig om een koekje aan te maken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
setcookie('key', 'sleutel', time()+3600*24*365); //zo kan je het 1 jaar gewoon gebruiken, zonder die key te moeten invullen!
?>
Derk  Janssen
Derk Janssen
20 jaar geleden
 
0 +1 -0 -1
hallo ik heb een vraagje ik ben nog niet zo lang bezig met php, ik ben bezig met een community te maken voor het uitproberen van php, wat zijn mijn option om te cashe.
Want er zijn natuurlijk veel dingen die elke keer verandere in de community.
Ik heb het het script boven aan geplaats in me community maar nu cashest hij alles dus verandert er niets meer.
is het niet morgelijk om per objecte te cashe dat je dus de dingen die vaak verandere niet mee cashest.
Of zie ik dit helemaal verkeerd ?
zo niet kan iemand een voorbeeldje geven hoe ik dat het beste kan doen ?
Creator90
creator90
20 jaar geleden
 
0 +1 -0 -1
Leuk script

alleen toch nog een vraag wat gebeurt er als de cache file al bestaat en opnieuw wordt aangemaakt terwijl een andere gebruiker net de cache file uitleest.

krijg je dan geen halve teksten of foutmeldingen.
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Storeman storeman
storeman storeman
20 jaar geleden
 
0 +1 -0 -1
Caching is leuk en heel bruikbaar, echter is voor elke pagina een nieuw bestand niet echt een verbetering. Het openen, uitlezen en sluiten van bestand vind php nog een relatief inspannende klus (een query is een stuk sneller). Daarom zou het leuk zijn om bijvoorbeeld pagina's te cachen in een database, of in één cachefile (welke apache/php in het werkgeheugen laat staan). Hierdoor kun je ws nog een hele performancewinst halen.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. php-cachingsclasse

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.