jspit.de
Impressum


varCache - PHP Klasse zum Cachen von Variablen

Software: varCache - PHP Cache Class LGPL-Logo
Datei: class.varcache.php Download
Version: 1.0

Ziel

Die Klasse soll das Speichern unterschiedlicher Informationen für einen scriptübergreifenden Zugriff unterstützen. Nutzbar für den Informationsaustausch zwischen PHP-Scripten die per Cronjob gestartet werden, aber auch für einfache Anwendungen wie Besucherzähler, User-Online-Anzeigen oder IP-Sperren.
Das bietet die varCache-Klasse :
  1. Sofortiges Speichern von Variablen und Arrays
  2. Einfaches Löschen von Einträgen
  3. Methoden zur Verriegelung und Entriegelung des Zugriffs

Konzept und Funktion

Es werden skalare Datentypen und Arrays unterstützt. Die Klasse benutzt Dateien zur Speicherung und benötigt keine Sessions. Die Informationen werden bei den set-Methoden sofort in die Datei geschrieben und beim Lesen direkt aus der Datei geholt. Eine Dateisperre innerhalb der Methoden sorgt dafür, daß es bei einem gleichzeitigen Zugriff aus mehreren Scripten nicht zu Kollisionen kommt. Mit den expliziten Methoden für eine Sperre kann auch bei Zugriff auf mehrere untereinander abhängige Variablen eine Kollision vermieden werden. Die Klasse ist für eine kleine Anzahl Variablen konzipiert, die Dateigröße ist zugunsten von kurzen Zugriffszeiten auf 8000 Byte beschränkt. Dies ist ausreichend für ca. 500 Integerwerte oder 300 Strings mit 20 Zeichen. Gegenüber Datenbanken besteht der Vorteil des schnellen und bequemen Zugriffs auf einzelne Variablen, solange es bei einer geringen Anzahl von Informationen bleibt.

Benutzung

Die Klasse muß vor der Benutzung per include oder require eingebunden werden. Bei der Instanzerstellung kann ein Dateinamen angegeben werden. Fehlt dieser, wird 'varcache.dat' benutzt. Wird mit mehreren Instanzen in einem Script gearbeitet, muß jede Instanz einen anderen Dateinamen erhalten. Zwei Instanzen mit der selben Dateibasis sind nicht zulässig.

Beispiel Besucherzähler mit Datum:
//Besucherzähler mit Datum
require 'class.varcache.php';	//Klasse einbinden

$UserNickName = 'User';  //Ein Nickname User als test

//Instanz erstellen, Datei usercounter.dat zur Speicherung benutzen
$cache = new varCache('usercounter.dat');

//Sperre aktivieren, damit zwischen get() und set() kein anderes Script die Werte ändern kann
$cache->lock();

//Wenn Eintrag User existiert, Array mit get() holen und Ausgeben
if($cache->exists($UserNickName)) {
    list($counter,$datum) = $cache->get($UserNickName);
    echo 'Hallo '.$UserNickName.', der '.$counter.'. Besucher war am '.date('d.m.Y H:i',strtotime($datum)).' hier.';
}
//Wenn Eintrag nicht existiert ist user1 neu
else { 
    $counter = 0;
    echo 'Willkommen '. $UserNickName;
}

//Daten-array erstellen
$userArr = array(++$counter,date('Y-m-d H:i'));

//Daten-array speichern
$cache->set($UserNickName,$userArr);

//Sperre aufheben
$cache->unlock();

(Live)Beispiel :
Hallo User, der 7662. Besucher war am 20.10.2019 16:53 hier.

Methoden

AufrufBedeutung
set($name,$value) Speichert $value unter den Namen $name permanent. value kann ein skalarer Datentyp(int, float,string, bool) oder ein Array sein. Bei Erfolg wird true zurückgeliefert, false bei Fehler. Alternativ kann die Schreibweise $cacheInstance -> name = $value; benutzt werden.
get($name) Liefert die unter $name gespeicherte Variable oder NULL wenn unter $name nichts gefunden wurde. Der Zugriff kann auch per $value = $cacheInstance -> name; erfolgen. Ohne Parameter $name werden alle verfügbaren Informationen als array geliefert.
exists($name) Die Methode prüft, ob ein Wert unter $name existiert. Liefert true oder false. Entspricht isset($cacheInstance -> name).
delete($name) Löscht den Eintrag unter $name. Entspricht unset($cacheInstance -> name). Ohne $name werden alle Einträge gelöscht.
lock() Setz eine Sperre für die Instanz. Liefert true wenn die Sperre aktiviert werden konnte. false wird geliefert wenn die Datei bereits verriegelt wurde, keine Freigabe erhalten hat oder bei Fehler. Die Sperre bleibt bis zum Aufruf von unlock() aktiv.
unlock() Hebt die Sperre für die Instanz wieder auf. Liefert true, wenn eine Sperre aktiviert war und erfolgreich deaktiviert wurde. false wird geliefert wenn keine Sperre aktiv war oder bei Fehler. Es sollte sichergestellt werden, das wenn eine Sperre gesetzt wird diese mit unlock() auch wieder aufgehoben wird.
isLock() Prüft, ob für die Instanz bereits eine Sperre aktiv ist.