Browse Source

cache eingebaut

master
Georg Hopp 18 years ago
parent
commit
e39771330f
  1. 17
      components/personAdmin.php
  2. 118
      libs/c_cache.php

17
components/personAdmin.php

@ -3,10 +3,25 @@
require_once dirname(__FILE__) . '/../config.php';
require_once LIBDIR . 'initLocale.php';
require_once LIBDIR . 'c_personAdmin.php';
require_once LIBDIR . 'c_cache.php';
$cache = new c_cache (array ('a', 'b'));
$personAdmin = new c_personAdmin ($locale);
ob_start ('ob_gzhandler');
$personAdmin->show ();
if (! $cache->check (60))
{
sleep (10);
$personAdmin->show ();
$cache->update ();
}
else
{
print "<p>[kein update]<p>";
}
ob_flush ();
?>

118
libs/c_cache.php

@ -0,0 +1,118 @@
<?php
require_once LIBDIR . 'mutualExclusion.php';
class c_cache
{
private $lock;
private $cacheFile;
// generiere den Cache Filename aus dem
// 1. script Namen
// 2. einem Hash ueber alle verwendeten:
// - request parameter
// - Werte in GLOBALS
// - Sessionvariablen
// ausserdem wird das cache Verzeichnis auch gleich angelegt wenn es noch
// nicht existiert.
function __construct ($params=NULL, $globals=NULL, $session=NULL)
{
$cacheDir = CACHEDIR . substr ($_SERVER['PHP_SELF'], 1);
$cacheDirArr = explode ('/', $cacheDir);
$cacheParms = array ();
$cacheGlobals = array ();
$cacheSession = array ();
$cachaAllParm = array ();
$parmStr = '';
// cache Verzeichnis anlegen.
$_dir = '';
foreach ($cacheDirArr as $dir)
if (! is_dir ($_dir .= '/' . $dir) && $_dir !== '')
mkdir ($_dir, 0755);
unset ($_dir, $dir, $cacheDirArr);
// alle verwendeten req parameter holen
if ($params !== NULL)
foreach ($params as $parm)
if (isset ($_REQUEST[$parm]))
$cacheParms[$parm] = $_REQUEST[$parm];
else
$cacheParms[$parm] = '';
ksort ($cacheParms);
// alle verwendeten globals holen
if ($globals !== NULL)
foreach ($globals as $glob)
if (isset ($GLOBALS[$glob]))
$cacheGlobals[$glob] = $GLOBALS[$glob];
else
$cacheGlobals[$glob] = '';
ksort ($cacheGlobals);
// alle verwendeten session variablen holen
if ($session !== NULL)
foreach ($session as $sess)
if (isset ($SESSION[$sess]))
$cacheSession[$sess] = $SESSION[$sess];
else
$cacheSession[$sess] = '';
ksort ($cacheSession);
// und nu aus all denen einen md5 hash generieren.
$cacheAllParm = array_merge ($cacheParms, $cacheGlobals, $cacheSession);
unset ($cacheParms, $cacheGlobals, $cacheSession);
foreach ($cacheAllParm as $name => $value)
$parmStr .= '_' . $name . '=' . $value;
$parmStr = md5 ($parmStr);
$this->lock = NULL;
$this->cacheFile = $cacheDir . '/cache_' . $parmStr . '.html';
}
function check ($interval=0)
{
ob_start ();
clearstatcache ();
if (file_exists ($this->cacheFile) &&
time () - filemtime ($this->cacheFile) < $interval)
{
readfile ($this->cacheFile);
return TRUE;
}
else
{
$this->lock = acquireLock ($this->cacheFile, '1');
// inszwischen koennte der cache von einem anderen aufruf
// aktualisiert worden sein, also nochmal checken.
clearstatcache ();
if (file_exists ($this->cacheFile) &&
time () - filemtime ($this->cacheFile) < $interval)
{
releaseLock ($this->lock);
readfile ($this->cacheFile);
return TRUE;
}
return FALSE;
}
}
function update ()
{
$page = ob_get_flush ();
file_put_contents ($this->cacheFile, $page);
releaseLock ($this->lock);
}
};
?>
Loading…
Cancel
Save