Hier ein paar Codeschnipsel die Dir vielleicht weiterhelfen können.

[PHP] Zeichenketten normalisieren – Groß- und Kleinschreibung

Hallo,

heute mal wieder eine kleine Aufgabe in PHP. Folgende Situation:

Wir haben einen Text-String in dem (natürlich) ein Text steht. Nehmen wir an der Inhalt lautet
HIER bekommen Sie heute total GÜNSTIGE Gurken DIREKT vom Landwirt.
Wir möchten diesen String jetzt automatisch so umändern das alle Wörter die nur Großbuchstaben enthalten, umgewandelt wird in: Anfangsbuchstabe groß – Rest klein
Also so wie sich das gehört. Natürlich müssten wir jetzt logischerweise gucken welche davon wirklich mit einem Großbuchstaben anfangen, wenn Sie denn mitten im Satz stehen. Denn sonst würden wir eine furchtbare Rechtschreibung dabei entstehen lassen. Aber wenn man nicht gerade ein verdammt gutes Wörterbuch (Datenbank) und eine entsprechend gute Routine parat hat, dann muss man sich erst einmal mit meiner Lösung zufrieden geben.

Also Aufgabenstellung ist klar. Wörter die nur aus Großbuchstaben bestehen sollen in kleine Buchstaben mit dem ersten Zeichen groß umgewandelt werden. Aus dem Beispiel oben wird dann aus HIER -> Hier

Eine fertige Lösung gibt es nicht. Etwas eigenes muss her. Der naheliegendste Gedanke ist die Wörter aufteilen und jedes einzelne Kontrollieren ob es nur aus Großbuchstaben besteht. Wenn ja, dann umwandeln, wenn nicht…. dann nicht. Danach alles wieder zusammenbasteln und fertig.

Soweit, so gut. Funktioniert auch sehr schön. Nur eine Sache ist mir aufgefallen. Ich habe zum Umwandeln erst die Funktion ucfirst() benutzt. Diese macht genau das. Erster Buchstabe groß. Man muss nur vorher alles erst einmal mit strtolower() alles klein machen.
Und hier gab es das Problem. Durch Zufall habe ich “GRÖßE” umwandeln wollen. Dabei hat es die Umlaute total zerschossen. Wenn strtolower() Umlaute “klein macht” dann zerschießt es irgendwie den Charset. Genauer habe ich mich damit noch nicht beschäftigt, aber zumindest eine Lösung gefunden. Und die heißt: mb_strtolower($String,’UTF-8′)

Wie man sieht kann man hier den Charset mit angeben.  Somit bleiben Umlaute erhalten.

Hier noch mal der ganze Code.

function NormalizeString($String) {
		$StrA = explode(" ", $String);
		$StrAc = count($StrA);
		$Out = "";
		for($i=0;$i<$StrAc;$i++) {
			$tmp = preg_replace('/[^a-zA-ZäÄöÖüÜß]/', '', $StrA[$i]);
			if(!empty($tmp) && strtoupper($tmp) == $tmp) {
				//Alles groß
				$StrA[$i] = ucfirst(mb_strtolower($StrA[$i],'UTF-8'));
			}
			$Out .= $StrA[$i]." ";
		}
		
		return $Out;
	}

Erst erstellen wir mit explode() ein Array der einzelnen Wörter. Dann durchlaufen wir jedes einzelne in einer For-Schleife. Wir erstellen eine TMP-Variable in der das Wort noch einmal bereinigt wird, damit man es besser vergleichen kann. Was dann auch getan wird. Wird festgestellt das dass Wort groß geschrieben ist, so ändern wir das. Und dann geht alles wieder in die $Out Variable zurück und wird schließlich zurück gegeben.

Viele Grüße
Gordon

[PHP] Datum und Datumsfunktionen

Hallo,

lasst uns heute mal über Datumsfunktionen in PHP reden.

Um denjenigen erst einmal kurz den Wind aus den Segeln zu nehmen die eine interaktive Uhr (sprich eine mitlaufende Uhrzeitanzeige) haben möchten, die müssen sich nach Javascript-Codes umsehen. PHP ist eine Serverseitige Programmiersprache und kann selbst keine Interaktionen im Browser durchführen. Gut, man könnte jetzt anfangen mit AJAX oder Reloads rumzuspielen… aber warum schwierig wenn es auch (mit Javascript) einfacher geht.

Nun aber zum Datum mit PHP. Hier werden verschiedene Funktionen zur Verfügung gestellt. Die wohl wichtigste ist dabei date().

Date() gibt ein formatiertes Datum aus. Es kann sich um das aktuelle oder ein Datum aus einer Variable handeln. Zum Beispiel kann man damit auch Timestamps aus einer Datenbank formatieren. Weiterhin kann man genau angeben wie das Datum formatiert werden soll. Nur Datum oder nur Zeit oder beides.
string <strong>date</strong> ( string <code>$format [, int $timestamp = time() ] )

Eine weitere, oft genutzte Funkation, stellt mktime() dar. Dieser Befehl gibt einfach den aktuellen Timestamp zurück. Diesen kann man dann z.B. in einer Datenbank speichern oder was auch immer damit machen. Man kann bei dieser Funktion auch noch das Datum angeben, um zum Beispiel den Timestamp vom 01.03.1998 zu erhalten. Meist wird er aber ohne Parameter genutzt um einfach den aktuellen Timestamp zu erhalten.

int <strong>mktime</strong> ([ int <code>$hour = date(“H”) [, int $minute = date(“i”) [, int $second = date(“s”) [, int $month = date(“n”) [, int $day = date(“j”) [, int $year = date(“Y”) [, int $is_dst = -1 ]]]]]]] )

Mit strtotime() kann man einfach ein Datumsformat in einen Timestamp umwandeln. Um diesen dann z.B. mit date() neu zu formatieren oder ihn in einer Datenbank zu speichern. Erhält man also von irgendwo her z.B. ‘2000-07-01T00:00:00+00:00′ und braucht aber einen Timestamp… dann ist strtotime() die richtige Funktion.

int <strong>strtotime</strong> ( string <code>$time [, int $now ] )

Das sind die 3 meist genutzten Datumsfunktionen in PHP. Insgesamt sind es aber an die 50. Wenn hier also nicht das richtige dabei war, dann einfach mal bei php.net nachschauen.

Ich hoffe ich konnte ein wenig helfen.

Viele Grüße
Gordon

[PHP] Automatische Weiterleitung

Hallo,

heute möchte ich kurz über das Thema “Weiterleitungen mit PHP” sprechen. Kurz, weil es nicht viel zu sagen gibt :)

Der Code für eine Weiterleitung mit PHP sieht so aus:

<?php
	header("Location: http://www.domain.de/seite.php"); 
	exit(); 
?>

header() gibt einen HTML-Header aus. Mit “Location:” wird angewiesen das es sich um eine Weiterleitung handelt. Danach kommt dann die URL der Seite zu der Weitergeleitet werden soll. Und mit exit(); brechen wir das Script ab und beenden weitere Ausführungen.

Nun muss man aber noch dazu sagen das man schon nachdenken sollte bevor man einfach weiterleitet. Ist es z.B. eine permanente Weiterleitung, weil sich in der Webseitenstruktur etwas verändert hat (z.B. eine Seite hat eine neue Adresse bekommen), dann muss man dies auch angeben, sonst gibt es Probleme z.B. mit den Suchmaschinenrankings.

Eine permanente Weiterleitung sieht dann so aus:

<?php
	header("Status: 301 Moved Permanently");
	header("Location: http://www.domain.de/seite.php"); 
	exit(); 
?>

Mit der Zeile header("Status: 301 Moved Permanently"); geben wir an das diese Seite für immer verschoben wurde. Es gibt auch noch den 302 Code, der besagt das die Seite nur vorübergehend verschobene oder nicht erreichbar ist.
Wenn z.B. der Google-Bot vorbeikommt und den 301 Code vorfindet, dann wird er die Seitenänderung speichern und das nächste mal gleich zur neuen Seite gehen. So wird dann auch das Ranking übertragen, anstatt verloren zu gehen.

Das schöne an PHP Weiterleitungen ist das sie Serverseitig sind und immer funktionieren. Außerdem kann man Sie dynamisch gestalten. Weiterleitungen in der htaccess können zwar teilweise durch Regeln auch dynamisch erstellt werden, aber nicht so gut wie mit PHP direkt. Und Redirects in HTML sind irgendwie total für den Garten. Das gleiche mit Javascript-Weiterleitungen. Diese funktionieren bei Suchmaschinen und Benutzern ohne JS gar nicht.

Hoffe es hat geholfen. Wenn nicht, einfach Kommentar hinterlassen ;)

Viele Grüße
Gordon

[PHP] Zahlen runden mit PHP

Hallo zusammen,

heute mal wieder ein bisschen PHP. Eine kleine Anleitung zum hantieren mit Zahlen in PHP. Genauer gesagt das runden von Zahlen.

In PHP gibt es einige Funktionen mit denen man Zahlen runden kann. Dazu zählen number_format, ceil, floor und round. Mein persönlicher Liebling ist number_format. Warum?

Weil diese Funktion nicht nur rundet, sondern die Zahl auch gleich noch vernünftig Formatiert, soweit gewünscht. Der Syntax ist:

Syntax: string <strong>number_format</strong> (float Zahl [, int Dezimalstellen [, string Dezimaltrenner, string Tausendertrenner]])

Die Funktion kann mit einem Parameter, 2 oder 4 aufgerufen werden, nicht jedoch mit 3. Also

number_format (Zahl);
number_format (Zahl, Dezimalstellen)
oder
number_format (Zahl, Dezimalstellen, Dezimaltrenner, Tausendertrenner);

Ein Beispiel:

number_format (15329.6956, 2, ",", ".");

Ergibt eine Ausgabe von: 15.329,70

Die nächste Funktion, bzw. Funktionen sind ceil und floor. Diese runden einfach auf (ceil) oder ab(floor). Der Syntax lautet float ceil ( float $zahl ) bzw. float floor ( float $zahl ). In beiden Fällen wird auf die nächste Ganzzahl auf- bzw. abgerundet.

Und zu guter letzt die Funktion round. Sie ist das Mittelstück zwischen den vorherigen 3 Funktionen. Sie rundet einen Fließkommawert auf oder ab und man kann die Nachkommastellen angeben. Der Syntax lautet:
float <strong>round</strong> ( float <code>$zahl [, int $dezimalstellen = 0 [, int $modus]] )

Ein Beispiel:

round(15.1698, 2) ergibt: 15.17

Beachte das beim Programmieren immer mit dem Englischen Nummernformat gearbeitet wird. Dezimalstellen werden mit einem Punkt “.” abgetrennt und Tausenderstellen (wenn Sie denn einen Trenner haben) mit einem Komma “,”. Also genau andersrum als bei uns.
Deswegen ist die number_format Funktion ja auch so interessant ;)

Viele Grüße
Gordon

[PHP] Kommentare in PHP Scripten

Hallo zusammen.

Heute reden wir mal über Kommentare :)
Wenn man ein Script erstellt, dann ist es sinnvoll das Script zu kommentieren. Also eine kleine Dokumentation im Script. Denn solange man gerade damit Arbeitet und das Script in einer relativen Größe bleibt, weiß man noch was genau welche Zeile macht und wozu Sie da ist.

Doch spätestens wenn das Script beachtliche Formen annimmt und/oder man nach Wochen oder Monaten mal wieder reinschaut… ist alles weg. Wie war das noch gleich? Was macht diese Zeile hier? Wo finde ich jetzt das und das?…  Alles weg… der Code besteht nur noch aus Kauderwelsch.
Spätestens jetzt tritt man sich selbst in den Ar*** das man den Code nicht Kommentiert hat.

Natürlich dauert es länger wenn man zum Code auch noch was schreiben muss… aber irgendwann kann es sich auszahlen. Auch (und gerade) wenn man ein Projekt von einem anderen Programmierer übernimmt ist es wichtig Dokumentierten Code vorzufinden.

Und es ist sooo einfach ;) 2 Schrägstriche (//) bei einer Zeile und ein Schrägstrich mit Stern bei mehreren Zeilen (/* am Anfang… und */ am Ende). Das ganze sieht dann so aus.

<?php
echo "vor dem Kommentar";
// Hier ein Einzeiliger Kommentar
echo "nach dem Kommentar";
?>

Und noch ein Mehrzeiliger Kommentar:

<?php
echo "vor dem Kommentar";
/* Dieser Kommentar
   geht über mehrere
   Zeilen */
echo "nach dem Kommentar";
?>

Viele Grüße
Gordon

[PHP] Datei löschen

Hallo zusammen,

heute möchte ich mal auf die Frage eingehen ob man mit PHP Datei(en) löschen kann.

Zu erst einmal muss man unterscheiden. Dateien auf dem Webserver und Dateien auf der lokalen Festplatte. Ersteres ja, letzteres nein.
PHP hat natürlich keinen Zugriff auf die Dateien des Besuchers einer Webseite. Das hat keine Serverseitige Programmiersprache. Auch Clientseitige Scripte (wie Javascript) können das nur bedingt. Sonst wäre es ja jeder Webseite ohne weiteres wahllos Dateien zu löschen. Das wäre ein Desaster.

Auf dem Webserver kann PHP jedoch, bedingt, Dateien löschen. Bedingt heißt das man auch hier nicht einfach wahllos irgendwelche Dateien löschen kann. Auch das wäre ein Desaster.

Das PHP-Skript braucht für die entsprechende Datei auch entsprechende Rechte. Unter Linux sogar noch bestimmte Gruppen- und Benutzerzugehörigkeiten.

Doch im Normalfall ist es nicht so Kompliziert wie es sich jetzt anhört. Denn im Normalfall wird ja meist eine Datei gelöscht die auch mit dem gleichen Skript erstellt wurde. Also zum Beispiel eine temporäre Datei oder eine Datei die ein User hochgeladen (ein Bild z.B.). Dann wurde die Datei auch mit dem PHP Skript erstellt und trägt dessen User- und Benutzerrechte. Damit auch das Recht die Datei wieder zu löschen.

Doch wie funktioniert es?
Ganz einfach. Alles was wir brauchen ist der PHP-Befehl zum Datei löschen und der Pfad der Datei selbst. Das passt in eine Codezeile.

$res = unlink("testdatei.hm");

Das war’s schon. In $res ist dann der Rückgabewert enthalten. 1 = erfolgreich gelöscht und 0 = Datei konnte nicht gelöscht werden.

Bei Verzeichnisstrukturen können relative wie auch absolute Pfadangaben gemacht werden.

[PHP] Array sortieren

Hallo,

heute beschäftigen wir uns mal mit einem Array in PHP. Genauer gesagt mit der Frage wie man ein PHP Array sortieren kann.

Arrays sind Variablen in denen mehrere Werte gespeichert werden können. Das ist in vielerlei Hinsicht nützlich. Hat man zum Beispiel ein Array mit Zahlen, die wild in das Array eingegeben werden, und möchte dieses dann Sortiert ausgeben, so muss man es sortieren lassen. Oder auch Namen nach Alphabet sortieren, etc.

Dazu bietet PHP natürlich eine Funktion. Doch Moment. Erst einmal müssen wir wissen was für ein Array vorliegt. Ein einfaches oder ein Multidimensionales. Ein einfaches Array hat nur eine Ebene. Zum Beispiel:

$array[0] = "Max"; 
$array[1] = "Ernst"; 
$array[2] = "Sven";

… und so weiter.
Ein Multidimensionales Array besitzt mehrere Ebenen. Zum Beispiel:

$array[0]["Vorname"] = "Max"; 
$array[0]["Nachname"] = "Schlüter"; 
$array[1]["Vorname"] = "Ernst"; 
$array[1]["Nachname"] = "Mustermann";

Ein einfaches Array lässt sich mit einer Codezeile sortieren.

$array  = asort($array);
Für Aufsteigend und
$array  = asort($array);
Für Absteigende Sortierung.

Komplizierter wird es jetzt bei Multidimensionalen Arrays. Hier brauchen wir eine Hilfsfunktion.

function multisort($value_a, $ value _b) {
	$a = $value _a[1];
	$b = $value _b[1];
	if ($a == $b) {
		return 0;
	}
	return ($a < $b) ? -1 : +1;
}

usort($array, 'multisort');

Damit lässt sich dann auch ein Multidimensionales Array sortieren.

[PHP] Text richtig kürzen. Nach dem Wort, nicht mittendrin.

Hallo,

hier mal wieder ein Codeschnipsel den ich selbst des Öfteren brauche.

Ab und an muss man mit PHP ja mal einen Text kürzen. Zum Beispiel um eine kleine Vorschau des Textes in einer Kategorie anzuzeigen oder auf sonst einer Übersichtsseite.

Nun könnte man mit substr() den Text einfach nach der vorgegebenen Anzahl an Zeichen abschneiden und 3 Punkte dahinter setzen. Leider passiert dann in den meisten Fällen folgendes:

Hallo lieber Mann im Mo…

Der Text wird mitten im Wort abgeschnitten. Das sieht bescheiden aus. :( Und die Lösung ist so einfach. Die folgende Zeile schafft einfach Abhilfe. Hier wird der Text nur nach ganzen Wörtern abgeschnitten.

$string = Der Text der abgeschnitten werden soll.
$length = Nach wie vielen Zeichen soll der Text abgeschnitten werden.

$string = preg_replace("/[^ ]*$/", '', substr($string, 0, $length));

php_cache

[PHP] Einfacher Cache für Webseiten mit PHP

Hallo zusammen,

heute möchte ich mal ein paar Denkanstöße zum Thema Webseite Cachen geben.

Frei übersetzt heißt “cache”: Zwischenspeicher. Und genau das ist es auch. Es wird etwas Zwischengespeichert um etwas schneller zu machen. In diesem Fall die Webseite.
Doch warum Zwischenspeichern? Was bringt das? Hierzu ein kleines Beispiel, welches ich die letzten Tage erfahren durfte.

Ich habe eine Webseite die sich automatisch Inhalte besorgt und in eine Datenbank schreibt. Dazu generiert es automatisch Keywords. Das hat auch alles immer gut geklappt, bis jetzt mein Server ständig in die Knie gegangen ist. Es hat nicht lange gedauert bis ich diese Webseite als den Übeltäter herausgefischt hatte. Dazu muss ich sagen das ich bei der Programmierung ein wenig geschlampt habe. Aber für unser Beispiel ist es optimal.

Also die Webseite ist eine Art Shop. Mit Kategorien und Artikeln. Über 70.000 Artikeln! Und bei jedem Aufruf durch einen Besucher wird die angeforderte Seite generiert. Die Daten werden aus der Datenbank abgefragt und in das Template eingefügt. Dazu gibt es noch Tag-Clouds und ähnliche Artikel. Das sind pro Seite enorme Belastungen für die Datenbank.

Doch schlussendlich sind die einzelnen Seiten immer gleich. Artikel A ist immer Artikel A und die Seite wird daher immer gleich bleiben. Nur die Tags in der Tag-Cloud ändern sich.
Also ist die beste Lösung ein Caching System. Denn mit einem Cache-System wird die Seite einmal generiert und in einem Cache abgelegt. Ruft der nächste Besucher die gleiche Seite noch einmal auf, dann wird die Seite nicht neu erzeugt, sondern aus dem Cache geladen. Das schon die Datenbank und steigert die Performance enorm.

Doch wie funktioniert solch ein Caching System? Eigentlich ganz einfach. Der logische Ablauf ist ja ganz einfach:

Seite muss ja beim ersten Aufruf definitiv generiert werden. Dabei wird der Inhalt im PHP-Cache gehalten und am Ende in eine (Cache)Datei geschrieben und auch ausgegeben. Wird die selbe Seite noch einmal aufgerufen, wird geprüft ob die Cache-Datei vorhanden ist. Wenn ja, dann die Cache-Datei laden und ausgeben. Wenn nicht dann ist es ein “erster Aufruf”.

Soweit die groben Gedanken. Jetzt etwas Detailierter.

Wie ordnen wir denn eine URL einer Datei zu?
Ich habe das mit einem SHA1-Hash gemacht. Damit kann ich eine URL in einen Hash verwandeln, den ich dann als Dateinamen benutze. Somit kann ich einfach prüfen ob eine URL schon gecached ist.

Wird meine Seite jetzt statisch?
Teilweise ja. Aber ein Cache sollte auch mal erneuert werden. Wie oft, das muss jeder individuell entscheiden. Ich Lösche zwischengespeicherte Seiten nach 6 Stunden in der Regel wieder. Warum? Weil sich immer mal etwas ändern kann.
Wie macht man das? Ganz einfach prüfen wann die Cache-Datei erstellt wurde. Wenn Datum länger her ist als 6 Stunden (z.B.) dann die Datei löschen und neu erstellen.

Was ist wenn ich in meiner Seite dynamische Elemente habe?
Ein Cache schaltet grundsätzlich erst einmal alle dynamischen Teile einer Seite aus, da die Seite statisch in eine Datei geschrieben wird. Deswegen muss der Cache auch ab und zu mal wieder gelöscht werden.
Gibt es nun aber Inhalte auf der Seite die bei jedem Aufruf geändert bzw. dynamisch sein sollen, so muss das System so angepasst werden, das dies möglich ist. Zum Beispiel kann man im Template einen Code einbauen, der jedes mal dann ersetzt wird. Wird die Zwischengespeicherte Seite nun ausgelesen so muss der Code vor der Ausgabe ersetzt werden. Das ist gar nicht so schwer wie es sich anhört ;)

Ich werde es am besten mal an ein wenig Code erklären :)

Am Anfang der PHP-Datei (am besten Auslagern oder eine zentrale PHP-Datei haben):

//CACHING Function
// ===================================
define(CACHE_TIME, 43200);
$url = sha1($_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
if ((file_exists(ROOT_FOLDER.'cache/'.$url.'.pcae') == true) && (filemtime( ROOT_FOLDER.'cache/'.$url.'.pcae' ) >= ( mktime()-CACHE_TIME ))) {
        //load cache file
        $content = file_get_contents(ROOT_FOLDER.'cache/'.$url.'.pcae');
        include(ROOT_FOLDER.'/funktionen/funktionen/is_chached_functions.php');
        print_r($content);
        exit;
}
elseif ((file_exists(ROOT_FOLDER.'cache/'.$url.'.pcae') == true) && (filemtime( ROOT_FOLDER.'cache/'.$url.'.pcae') < ( mktime()-CACHE_TIME ))) {
        //old cache file, delete
        unlink(ROOT_FOLDER.'cache/'.$url.'.pcae');
}

ob_start();

Und am Ende der Datei (vor jeder Ausgabe):

$content = ob_get_contents();
ob_end_clean();

if (file_exists(ROOT_FOLDER.'cache/'.$url.'.pcae') == true) {
        //delete old cache file
        unlink(ROOT_FOLDER.'cache/'.$url.'.pcae');
}
//Write new cache file
file_put_contents(ROOT_FOLDER.'cache/'.$url.'.pcae', $content);

//functions which shouldn't be cached!
include(ROOT_FOLDER.'/funktionen/funktionen/is_chached_functions.php');
print_r($content);
unset($content);
exit;

Gehen wir das noch einmal Zeile für Zeile durch. Fangen wir oben an.
Ich habe mir hier in CACHE_TIME die Zeit gespeichert, wie oft die Zwischengespeicherte Seite erneuert werden soll. Zeit in Sekunden.
Dann erstelle Ich den SHA1-Hash der aktuellen URL mit Parametern (Wichtig!).
Nun wird geprüft ob die Datei schon existiert und wie alt sie ist. ROOT_FOLDER ist mein Stammverzeichnis auf meinem Server.

Existiert die Datei schon und ist noch nicht veraltet, dann wird der Inhalt geladen. In meiner Datei “is_chached_functions.php” sind Funktionen enthalten die dynamische Inhalte im Template ersetzen. Was ich vorhin kurz angesprochen hatte. Solch ein Inhalt kann im Template mit “<!– UHRZEIT –>” vermerkt sein. In der Funktion würde nun stehen “$content = str_replace(“”<!– UHRZEIT –>”, date(“H:i:s”), $content);”. Damit hätten wir trotz Cache dynamisch die Uhrzeit in die Seite eingefügt.
Und letztendlich wird die Seite ausgegeben.

Existiert die Datei zwar, ist aber veraltet, dann wird sie einfach gelöscht und das Scipt läuft normal weiter und baut die Seite neu auf. Wichtig ist ob_start(). Damit wird angegeben das keine direkte Ausgabe erfolgt, sondern die Seite im PHP Speicher Zwischengespeichert wird.

Der untere Teil:

Hier schreiben wir nun den PHP Zwischenspeicher in die Variable $content und leeren ihn. Dann prüfen wir noch einmal ob die Datei evtl. existiert und löschen sie einfach, falls ja. (Kann ja mal passieren.)
Dann schreiben wir die erzeugte Seite aus $content in die Cache-Datei.
Nicht vergessen auch hier die dynamischen Inhalte zu ersetzen (in unserem Beispiel die Uhrzeit).
Dann noch die Seite ausgeben und fertig. Nun wurde eine neue Cache-Datei erzeugt, die dann beim nächsten Aufruf ausgegeben wird, anstatt die Seite komplett neu aufzubauen.

Der Server wird es danken ;) Der Hoster übrigens auch :) Und der Besucher auch :) Alle werden sich über mehr Performance, weniger Ressourcenverbrauch und schnellere Ladezeiten freuen ;)

Viele Grüße
Gordon