In diesem Tutorial möchte ich euch erklären, wie Sie einen Dateicache realisieren kann. Häufig haben Sie das Problem, dass PHP relativ rechenintensive Prozesse generiert. Da gewisse Ausgaben nicht immer wieder ständig neu berechnet werden müssen, können Sie diese Ausgaben einmal berechnen und die Ausgabe in einer Textdatei für eine gewisse Zeit speichern. Dadurch spart Sie gewisse Rechenressourcen und der Seitenaufbau von der Seite wird schneller realisiert. Dadurch können Sie unter anderem die Anzahl der MySQL Abfragen in einem PHP-Script drastisch senken.
Natürlich macht das Caching keinen Sinn, bei Daten, die sich ständig ändern. Wenn Sie aber zum Beispiel eine News-Seite haben, wo sich die Inhalte zum Beispiel einmal oder zweimal am Tag ändern, müssen Sie nicht die gesamten Abfragen an einer MySQL Datenbank ständig generieren. Wenn Sie diese Datei über eine Caching-Funktion generiert haben, wird der eigentliche Prozess zum Generieren der Daten erst wieder nach Ablauf der Caching-Zeit generiert.
Nachfolgend findet ihr als Erstes eine PHP-Funktion, womit sie überprüfen kann, ob bereits eine Cachedatei vorhanden ist und ob diese bisher nicht zu alt ist. Diese Funktion gibt true oder false zurück. Dadurch wissen Sie, dass die Cachedatei neu geschrieben werden muss oder auf die alte Datei zugegriffen werden kann.
Code für die Caches Check Funktion:
<?php
/**
* @abstract – Diese Funktion prüft bereits eine
Cachedatei angelegt wurde und gibt false
oder true zurück. Wenn die Datei bereits
angelegt wurde, wird überprüft, ob die Caching
Zeit bereits abgelaufen ist.
* @var $datei – Dateiname der Cachedatei
* @var $cachzeit – Zeit in Sekunden, bis eine neue
Datei angelegt werden soll
* @return true – Cache schreiben oder überschreiben
* @return false – Cache lesen
*/
function cachen_check($datei, $cachzeit = 300 ) {
$datei = './'.$datei.'.txt';
/**
* Prüfen, ob es die Datei gibt
*/
if (file_exists($datei) == true) {
/**
* Alter der Datei prüfen
*/
if (filemtime($datei) < (time()-$cachzeit)) {
/**
* Update alter Daten in Cachedatei
*/
$ausgabe = true;
} else {
/**
* alte Daten lesen in Cachedatei
*/
$ausgabe = false;
}
} else {
/*
* Daten anlegen in Cachedatei
*/
$ausgabe = true;
}
return $ausgabe;
}
?>
Nachdem wir den Status der Cachedatei ermittelt haben, können wir entsprechend bei einer true Rückgabe unserem Rechenprozess ausführen. Nachdem der Rechenprozess fertig ist, speichert Sie die Ausgabe, in eine Variable zwischen.
Diese Variable übermitteln wir unserer nachfolgenden schreib Funktion und geben anschließend den Text wieder aus. Wenn der Status false zurückgegeben wurde, führen wir unseren Rechenprozess nicht aus und lesen ausschließlich unsere generierte Cachedatei ein. Und geben den Rückgabewert wieder mit echo aus.
Code für die schreib Funktion:
<?php
/**
* @abstract – Diese Funktion schreibt oder liest
entsprechend die Cachedatei ein.
* @var $datei – Dateiname der Cachedatei
* @var $cachzeit – Zeit in Sekunden, bis eine neue
Datei angelegt werden soll
* @var $inhalt – Inhalt der in der Cachedatei
geschrieben werden soll, wenn dieser noch
nicht vorhanden ist.
* @return string – Inhalt der Cachedatei
*/
function cachen($datei = '', $cachzeit = 300 ,
$inhalt = '' ) {
$ausgabe = '';
$datei = './'.$datei.'.txt';
/**
* Prüfen, ob es die Datei gibt
*/
if (@file_exists($datei) == true) {
/**
* Prüft ob die Datei noch gültig ist
*/
if (filemtime($datei) < (time()-$cachzeit)) {
/**
* Update alter Daten in Cachedatei
*/
$handle = @fopen($datei, "w");
fwrite($handle, $inhalt);
fclose ($handle);
if (file_exists($datei) == true) {
@chmod ($datei, 0757);
}
$ausgabe .= $inhalt;
} else {
/**
* alte Daten lesen in Cachedatei
*/
$handle = @fopen ($datei, "r");
while (!feof($handle)) {
$ausgabe .= fgets($handle, 4096);
}
fclose ($handle);
}
} else {
/**
* Daten anlegen in Cachedatei
*/
$handle = fopen($datei, "w");
fwrite($handle, $inhalt);
fclose ($handle);
if (@file_exists($datei) == true) {
@chmod ($datei, 0757);
}
$ausgabe .= $inhalt;
}
return $ausgabe;
}
?>
Jetzt haben wir beide Funktionen, damit wir diese Funktionen verwenden können, könnten Sie zum Beispiel nachfolgenden Code verwenden.
<?php
$dateiname = 'datei';
if (cachen_check($dateiname, 300 ) == true) {
/**
* Cache schreiben
*/
/**
* An dieser Stelle könnte der stehen, um die
Variable $ausgabe zu befüllen.
*/
$ausgabe = 'Der Inhalt wurde am '.date("d-m-Y
\u\m H:i:s").' Uhr erstellt.';
cachen($dateiname, 300 , $ausgabe );
} else {
/**
* Cache lesen
*/
$ausgabe = cachen($dateiname, 300 , '' );
}
echo $ausgabe;
?>
Wenn ihr noch Fragen zu der Verwendung von diesen Funktionen habt, so nutzt bitte entweder unser Supportforum oder schreibt direkt einen Kommentar in unserer Facebook Fanseite. Bitte habt Verständnis, dass ich in diesem Tutorial nicht auf jede einzelne kleine Funktion eingehe, daher ist dieses Tutorial in der fortgeschrittenen Sektion gelistet. Diese Funktion ist natürlich ausbaufähig und soll ausschließlich die Verwendung von einem Cache demonstrieren.