Tutorials >
PHP >
Server Side Caching
|
Gepost op: 28 januari 2005 - 09:53 |
|
|
|
MySQL ver gevorderde
|
graag variabelen buiten quotes |
|
|
|
Gepost op: 28 januari 2005 - 13:26 |
|
|
|
PHP beginner
|
Correctomundo!
// edita |
|
|
|
Gepost op: 03 februari 2005 - 09:09 |
|
|
|
Moderator
|
Misschien handig om het updaten van de gegevens iets duidelijker naar voren te laten komen. Ik las er zelf overheen dus misschien even wat vet gedrukt maken of zoiets. |
|
|
|
Gepost op: 13 februari 2005 - 22:19 |
|
|
|
Lid
|
Handige tut
|
|
|
|
Gepost op: 21 juli 2005 - 10:49 |
|
|
|
Lid
|
Nu ik de tut nog eens goed lees merk ik iets,
op de pagina van de functies staat er:
$cache = fopen("cache.inc.php","w");
$cache = fopen("cache.inc.php","w");
en op de include page heb je
if (!file_exists("cache.php")) {
script_top10();
}
include("cache.php");
script_top10(); } include("cache.php");
Moet dit dan ook niet met cache.inc.php zijn?
if (!file_exists("cache.inc.php")) {
script_top10();
}
include("cache.inc.php");
script_top10(); } include("cache.inc.php");
Of ben ik verkeerd? |
|
|
|
Gepost op: 23 juli 2005 - 13:52 |
|
|
|
PHP beginner
|
Correctomundo! Soms gebruik .inc erbij in m'n pages, soms niet, en hier zie je de reden waarom ik ze beter niet dooreen zou gebruiken ;)
aangepast!
|
|
|
|
Gepost op: 09 september 2005 - 02:02 |
|
|
|
HTML beginner
|
Interessant idee voor server-side caching!
Maar ik zie niet wat je precies "cached" bij client-side-caching? Je voert toch gewoon je query uit wat in principe niets cached. |
|
|
|
Gepost op: 12 oktober 2005 - 13:04 |
|
|
|
Onbekend
|
Smarty heeft al een eigen cache. |
|
|
|
Gepost op: 04 januari 2006 - 18:56 |
|
|
|
PHP expert
|
Beetje simpel en totaal niet effectief ;) Maar om mee te beginnen is het zeer geschikt hoor.
Op ons forum project gebruiken we hier een class voor.
Elke query (SQL class) kan door een extra argument in het cache gezet worden.
Dus dan krijg je zoiets:
$db->sql_query ( "SELECT * FROM een_tabel", 3600 );
Deze query zal dus het komende uur (3600 sec) in het cache staan, en de query zal dat uur niet uitgevoerd worden maar wordt volledig automatisch opgehaald uit een cache bestand (sql_{random_code}.php).
En de regel onder een INSERT query die dus data toevoegt aan een tabel die gecached "kan" zijn, daar legen we dan het cache weer:
$db->sql_query ( "INSERT INTO een_tabel" );
$cache->destroy_cache ( 'een_tabel' );
En de volgende keer wordt weer de "real-time" gegevens opgehaald en in het cache gezet.
Deze manier zorgt dus voor een enorme vermindering van het aantal SQL queries. |
|
|
|
Gepost op: 16 januari 2006 - 11:24 |
|
|
|
PHP beginner
|
Op zich een schitterende methode, shorty073!
Nu zou ik het ook eerder zo aanpakken, aangezien je kennis over php uiteraard progressief _vooruit_ gaat ;) Ik ben momenteel ook bezig aan m'n eigen forummodule, en dan zie je dat het ook vaak een stuk effectiever kan.
Maar met deze tutorial wil in feite vooral aantonen dat deze manier bestaat, en zo kan je het ook eens anders aanpakken.
@ Henri: mogelijkheden zat dus
@ raza: client-side-cache komt gewoon neer op browser-cache, gecombineerd met een shitload aan query's |
|
|
|
Gepost op: 06 juni 2007 - 22:10 |
|
|
|
Crew algemeen
|
Citaat: [I][B]shorty073[/B] schreef op 04 januari 2006 - 18:56[/I]
Beetje simpel en totaal niet effectief ;) Maar om mee te beginnen is het zeer geschikt hoor.
Op ons forum project gebruiken we hier een class voor.
Elke query (SQL class) kan door een extra argument in het cache gezet worden.
Dus dan krijg je zoiets:
$db->sql_query ( "SELECT * FROM een_tabel", 3600 );
Deze query zal dus het komende uur (3600 sec) in het cache staan, en de query zal dat uur niet uitgevoerd worden maar wordt volledig automatisch opgehaald uit een cache bestand (sql_{random_code}.php).
En de regel onder een INSERT query die dus data toevoegt aan een tabel die gecached "kan" zijn, daar legen we dan het cache weer:
$db->sql_query ( "INSERT INTO een_tabel" );
$cache->destroy_cache ( 'een_tabel' );
En de volgende keer wordt weer de "real-time" gegevens opgehaald en in het cache gezet.
Deze manier zorgt dus voor een enorme vermindering van het aantal SQL queries.Â
dit doet toch hetzelfde?
Je slaat een bestand op, en als er iets veranderd wordt op je website laat je het automatisch verwijderen, net zoals bij jou.
Enkel zit dit niet in een classe, wat logisch is! Om 1 functie in een classe te steken is dom. However, de check of een bestand bestaat zit bij miij ook in een classe.
ik heb zoiets:
$cache->start('filename'); //./cache/filename.cache
//code
$cache->write();
start() controleerd dan of filename.cache bestaat, bestaat het? dan echo'ed hij het, en sluit hij de pagina met exit();. Bestaat het niet begint hij een nieuw object (ob_start). Bij $cache->write leest hij het object dan uit (ob_get_contents) en sluit hij het (ob_end_clean()). Hierna schrijft hij alles naar filename.cache.
Mijn classe:
<?php
class cache extends templatevars
{
// door Wim Mariën
// http://www.gdx.be/
// VARS /
// directory with .cache files
private $dir = './cache/';
private $filename = NULL;
protected $caching = false;
// __construct /
// PUBLIC (duh!)
// cache::__construct()
// AUTOMATIC
public function __construct ($dir=NULL)
{
if(isset($dir))
$this->dir = $dir;
if(substr($this->dir, -1) != '/')
$this->dir .= '/';
}
// __destruct /
// PUBLIC (duh!)
// cache::__destruct()
// AUTOMATIC
public function __destruct ()
{
$this->dir = NULL;
}
// start /
// PUBLIC
// cache::start([string] filename)
public function start ($filename)
{
$this->filename = $filename;
if(isset($filename) && !is_file($this->dir.$filename.'.cache'))
{
ob_start();
$this->caching = true;
}
else
{
$output = $this->readCache($filename);
echo $this->parse($output);
exit();
}
}
// write /
// PUBLIC
// cache::write ([string] filename)
public function write ($file='')
{
if(empty($file) && !empty($this->filename))
$file = $this->filename;
elseif(empty($file) && empty($this->filename))
return false;
if($this->caching)
{
$content = ob_get_contents();
ob_end_clean();
$this->updateCache($file, $content);
echo $this->parse($content);
}
}
// updateCache /
// PRIVATE
// cache::updateCache ([string] filename, [string] content)
// write a .cache file (by update)
private function updateCache ($file, $content)
{
$cachefile = fopen($this->dir.$file.'.cache', 'w');
fwrite($cachefile, $content);
fclose($cachefile);
return true;
}
// readCache /
// PUBLIC
// cache::readCache([string] filename)
// read a .cache file
public function readCache($file)
{
$cachefile = fopen($this->dir.$file.'.cache', "r");
while(!feof($cachefile))
{
$content .= fgets($cachefile, 4096);
}
fclose($cachefile);
return $this->parse($content);
}
// deleteCache
// PUBLIC
// cache::deleteCache([string] filename)
// delete a .cache file
public function deleteCache($file)
{
if(unlink($this->dir.$file.'.cache'))
return true;
else
return false;
}
}
?>
<?php class cache extends templatevars { // door Wim Mariën // http://www.gdx.be/ // VARS / // directory with .cache files private $dir = './cache/'; private $filename = NULL; protected $caching = false; // __construct / // PUBLIC (duh!) // cache::__construct() // AUTOMATIC public function __construct ($dir=NULL) { $this->dir = $dir; if(substr($this->dir, -1) != '/') $this->dir .= '/'; } // __destruct / // PUBLIC (duh!) // cache::__destruct() // AUTOMATIC public function __destruct () { $this->dir = NULL; } // start / // PUBLIC // cache::start([string] filename) public function start ($filename) { $this->filename = $filename; if(isset($filename) && !is_file($this->dir.$filename.'.cache')) { $this->caching = true; } else { $output = $this->readCache($filename); echo $this->parse($output); } } // write / // PUBLIC // cache::write ([string] filename) public function write ($file='') { $file = $this->filename; return false; if($this->caching) { $this->updateCache($file, $content); echo $this->parse($content); } } // updateCache / // PRIVATE // cache::updateCache ([string] filename, [string] content) // write a .cache file (by update) private function updateCache ($file, $content) { $cachefile = fopen($this->dir.$file.'.cache', 'w'); return true; } // readCache / // PUBLIC // cache::readCache([string] filename) // read a .cache file public function readCache($file) { $cachefile = fopen($this->dir.$file.'.cache', "r"); { $content .= fgets($cachefile, 4096); } return $this->parse($content); } // deleteCache // PUBLIC // cache::deleteCache([string] filename) // delete a .cache file public function deleteCache($file) { if(unlink($this->dir.$file.'.cache')) return true; else return false; } } ?>
|
|
|
|
Gepost op: 09 juli 2007 - 20:22 |
|
|
|
PHP gevorderde
|
Heel slim |
|
|
Enkel aanvullende informatie is welkom. Geen prijzende of afkeurende reacties. |
|
|
|