yubb.de-Logo
Tutorials
yubb@yubb
yubbService
Inside yubb

PHP-Scripte cachen



Allein die Ausführung eines PHP-Scripts benötigt viel Serverkapazität. Für einen Foren-Thread sind bereits über 100 MySQL-Abfragen nötig. Bei vielen Besuchern gleichzeitig kann es schon vorkommen, dass der Server sehr langsam wird oder zusammenbricht.
Der Inhalt der meisten Seiten ändert sich aber nicht andauernd. Da lohnt es sich, den von PHP erzeugten HTML-Code in einer Datei zwischenzuspeichern.


HTML-Ausgabe in Cache speichern
In der Datei, die gecached werden soll, kommt vor dem bisherigen Inhalt:

script.php (vor dem bisherigen Inhalt):
1
2
3
4
5
6
7
8
9
10
<?
ob_start
();
$cache_file "cache/seite.tmp";
clearstatcache();
if(
file_exists($cache_file)) {
header("content-lenght: ".filesize($cache_file));
readfile($cache_file);
}
else {
?>


Über die Variable $cache_file wird der Speicherort der Datei festgelegt. Hat das Script mehrere Unterseiten wie index.php?seite=...,
kann man auch GET oder POST-Werte hinzufügen.
Beispiel:
Beispiel:
1
2
3
<?php
$cache_file 
"cache/seite_".$_GET['page'].".tmp";
?>

Bei index.php?seite=1 wäre der Dateiname hier cache/seite_1.tmp.
Man darf nicht vergessen, für die jeweilige Datei oder den Ordner, in dem sie liegt, entsprechende Schreibrechte zu setzen. Das geht in den meisten FTP-Programmen per Rechtsklick auf die Datei/Ordner --> Right/Rechte/CHMOD ---> alle Kästchen anklicken oder 777 eingeben.

Am Ende des Scripts ist auch noch etwas Code nötig.
script.php (nach dem bisherigen Inhalt):
1
2
3
4
5
6
<?
$open_cache_file 
fopen($cache_file"w");
fwrite($open_cache_fileob_get_contents());
fclose($open_cache_file);
}
?>


Mit ob_get_contents() bekommt man den HTML-Code, der an den Browser gesendet wird. Dieser wird jetzt gespeichert.


Cache wieder löschen
Wenn der Content geändert wird, muss der Cache wieder gelöscht werden, damit die Besucher auch die aktuelle Version sehen.
Den Code unten sollte man in alle Scripts einfügen, mit denen man Artikel/Posts/Einträge hinzufügen, ändern oder löschen kann.
delete_cache.php:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?
$ordner 
"cache";

$dir opendir ($ordner);

while (
false !== ($file readdir ($dir)))
{
  if (
$file != "." and $file != ".." and !is_dir($ordner."/".$file)) {
    
unlink($ordner."/".$file);
  }

}

closedir($dir);
?>


Dieses Script löscht alle Dateien in dem mit $ordner angegebenen Ordner.
Will man nur eine einzelne Datei löschen, kann man dies über
einzelne Datei löschen:
1
2
3
<?
unlink
("cache/seite.tmp");
?>
erreichen.

Beim nächsten Aufruf der normalen Seite geht das Spiel wieder von vorne los.
Die hier beschriebene Funktionsweise funktioniert natürlich auch mit Scripts, die Bilder oder PDFs generieren.
Scripts, die in Dateien schreiben, Mails versenden, usw. sollte man nicht cachen!

Geschrieben von dasepp am 02.05.2005 (14309x gelesen)
weiterempfehlen weiterempfehlen   Druckversion Druckversion   kommentieren kommentieren