: : g_SESSIONCACHESYSTEM
Balíček funkcí pro mezi skriptovou cache.
Použití je snadné, ale vhodné spíš pro rozsáhlé weby, kde se pořád berou stejné údaje.
A ještě nevím, jak dobře to bude pracovat na webu, kam chodí příliš často moc lidí.
Dalo by se ještě vylepšit o rychlý pre-cache všech údajů ze session na začátku skriptů, které budou údaje jen číst.
Použití:
Hned na začátku každého prvního skriptu
StartSessionCacheSystem() a na konci
StoreSessionCacheSystem().
Poté buď používat
SCSW nebo
SCSR a buď čtení z interní cache nebo bez ní.
Pro vyprázdnění celé cache dejte
ClearStoredSessionCacheSystem() a
StoreSessionCacheSystem().
Pro ukončení celé cache dejte
DropSessionCacheSystem.
<?
StartSessionCacheSystem();
SCSW("testvalue");
$v=SCSR("testvalue");
echo $v;
StoreSessionCacheSystem();
?>
Funkce
StartSessionCacheSystem() vrací:
- 1 při spuštění nové cache.
- datetimestamp posledního uložení staré cache.
- false když už je spuštěna.
Kód:
g_sessioncachesystem.php
<? /* SESSION CACHE SYSTEM */
$g_sessioncachesystem_true = true;
unset($SCS_CacheStarted);
unset($SCS_SessionCacheID);
function StartSessionCacheSystem($sesid='MainPHPSessionCacheSystem') {
$retn=false;
if (!isset($GLOBALS['SCS_CacheStarted'])) {
$sesid=md5($sesid);
session_id($sesid);
session_start();
$GLOBALS['SCS_SessionCacheID']=$sesid;
$GLOBALS['SCS_CacheStarted']=true;
if (!isset($_SESSION['SCS_SESSION'])) {
$retn=1;
$_SESSION['SCS_SESSION'] = 1;
} else
$retn=$_SESSION['SCS_SESSION'];
global $_SESSION;
}
return $retn;
}
unset($SCS_CacheEndedAlready);
function StoreSessionCacheSystem() {
if (!IsSCSStillLoaded()) return false;
$GLOBALS['_SESSION']['SCS_SESSION'] = strtotime("now");
session_write_close();
$GLOBALS['SCS_CacheEndedAlready']=true;
}
function ClearStoredSessionCacheSystem() {
if (!IsSCSStillLoaded()) return false;
if (is_array($GLOBALS['_SESSION'])) {
reset($GLOBALS['_SESSION']);
while(list($k,)=each($GLOBALS['_SESSION'])) {
if ($k!='SCS_SESSION') $GLOBALS['_SESSION'][$k]='';
}
}
}
function DropSessionCacheSystem() {
if (!IsSCSStillLoaded()) return false;
$GLOBALS['_SESSION'] = array();
session_destroy();
$GLOBALS['SCS_CacheEndedAlready']=true;
}
function IsSCSStillLoaded() {
if (isset($GLOBALS['SCS_CacheStarted']) && !isset($GLOBALS['SCS_CacheEndedAlready'])) return true;
else return false;
}
function GCH_ReadValue($valname) {
if (isset($GLOBALS['GLOBALCACHESYSTEM_'.$valname]) && !empty($GLOBALS['GLOBALCACHESYSTEM_'.$valname]))
return $GLOBALS['GLOBALCACHESYSTEM_'.$valname];
else return false;
}
function GCH_WriteValue($valname,$val) {
$GLOBALS['GLOBALCACHESYSTEM_'.$valname]=$val;
}
function SCS_ReadValue($valname,$gcache=0) {
if (!empty($gcache) && ($retval=GCH_ReadValue($valname))) return $retval;
if (IsSCSStillLoaded()) {
$retval=false;
if (isset($GLOBALS['_SESSION']['SESVAL_'.$valname])) {
$retval=$GLOBALS['_SESSION']['SESVAL_'.$valname];
}
if (!empty($gcache)) GCH_WriteValue($valname,$retval);
return $retval;
}
}
function SCSR($valname,$gcache=0) {
return SCS_ReadValue($valname,$gcache);
}
function SCS_WriteValue($valname,$val,$gcache=0) {
if (IsSCSStillLoaded()) {
$GLOBALS['_SESSION']['SESVAL_'.$valname]=$val;
if (!empty($gcache)) GCH_WriteValue($valname,$retval);
}
}
function SCSW($valname,$gcache=1) {
return SCS_WriteValue($valname,$gcache);
}
?>