Include-Möglichkeiten
Pflegeleichte Homepages bestehen aus mehreren Teilskripten, jedes hat eine spezielle Funktion. Und damit der Besucher dieses Wirrwarr nicht mitbekommt, gibt es einige Möglichkeiten, ihm eine komplette Seite zu anzeigen zu lassen. Theoretisch ist das Ganze auch mit Frames oder PopUps realisierbar, nur genau diese sollte man umgehen.
1. SSI
Mit Server Side Includes (SSI) lassen sich bestimmte Operationen dynamisch auf den Webserver erledigen. Man kann z.B. an einer bestimmten Stelle das Datum oder die Uhrzeit einbinden — oder auch ganze Seiten. Ob SSI auf einem Webserver installiert ist, sollte man beim Provider erkundigen, in der Regel ist es eine Leistung, die nicht standardgemäß vorhanden ist. Damit SSI ausgeführt wird, müssen die Dateien allerdings folgende Endungen besitzen: .shtml, .sht
Ein möglicher Befehl mit SSI könnte so aussehen:
<!--#include virtual="/header.html" -->
2. Include
Der Include-Gedanke ist folgender: ich habe eine ausgelagerte Datei, und füge diese ein. Das das Einfügen innerhalb einer Skriptsprache erfolgt, hat man die Möglichkeit, auf die aktuellen Variablen zuzugreifen, man kann damit z.B. den Ausgabetext in einer Variable weitergeben, damit dieser bevor er auf den Bildschirm erscheint, noch weiterverarbeitet werden. Die eingebundene Datei kann aber auch Ausgaben direkt auf dem Bildschirm ausgeben.
Wenn man diese Variante benutzt, muß eins klar sein: es besteht die Gefahr, bestehende Parameter unbeabsichtigt zu überschreiben. Zum Debuggen sollte man solche Includes auf jeden Fall als erstes ausschließen.
Verwendet man lediglich statischen Text, so ist der Effekt der selbe wie bei SSI.
<?php
include("a.php");
?>
3. Include + Funktionsaufruf / Klassen
Der Includegedanke funktioniert hier anders: ich importiere mit den Include-Befehl lediglich eine Funktion oder Klasse. Diese Aktion wird in der Regel am Anfang des Skriptes einmal ausgeführt, und sollte mit Funktionen wie require_once bzw. include_once geschehen, um die Gefahr des doppelten Hereinladens auszuschließen.
Beim »Includieren« passiert allerdings noch nichts: es wird lediglich nur eine Funktion oder Klasse bereitgestellt. Man kann nun zu jedem beliebigen Zeitpunkt im Skript auf diese Funktionen und Klassen zurückgreifen.
Im Gegensatz zum direkten Include habe ich keine Variablen zur Verfügung, denn diese werden gekapselt. Wenn die Funktion oder Klasse etwas benötigt, so muß es als Parameter übergeben bzw. über return als Rückgabewert zurückgegeben werden. Möchte ich mehr als einen Wert zurückgeben, muß eine entsprechende Struktur gebaut werden.
<?php
include_once("a.php");
$text = functionyxz($text);
?>
4. fopen ()
fopen öffnet eine Datei, sie kann aber auch einen Stream über das HTTP-Protokoll öffnen. Alternativ ist auch fsockopen() möglich. Die Übergabeparameter werden mittels der URL übergeben, der Rückgabewert ist der ausgebene Text.Echo-Befehle innerhalb der geöffneten HTTP-Dateien werden nicht auf dem Monitor angezeigt, sondern erscheinen als Inhalt der geöffneten Datei, die ausgelesen wird. Die Handhabung mit fopen ist über HTTP genauso wie über das lokale Dateisystem. Einzige Schwachstelle dieser Variante: bei der Übergabe funktionieren nur HTTP-GET-Parameter. Sollte es bei dieser Variante zu Problemen kommen, so sollte man den Weg über die IP wählen, häufige Probleme bei der Funktion liegen beim DNS-Server.
<?php
if ($lesedatei = fopen ("http:// domain.de/a.php?param=wert", "r"))
{
while (!feof($lesedatei))
{
$text.=fgets($lesedatei, 5000);
}
fclose($lesedatei);
}
?>
Ein Problem gibt es dabei: wenn der aufrufende Server tod ist, hängt das Skript bei fopen fest. D.h. es gibt (noch) keinen Rückgabewert.
Persönlich favorisiere Variante 3, im Rahmen der PlugIns auf meiner Seite habe ich mich für die 2. Variante entschieden.
Bisherige Kommentare (2)
Kommentar von Thiemo
Variante 4 geht (wie immer) auch kürzer: file_get_contents() zum Einlesen einer Datei in eine String-Variable bzw. readfile() zur direkten Ausgabe. Letzteres hat den selben Effekt wie include(), mit dem Unterschied, dass evtl. enthaltener PHP-Code nicht ausgeführt wird.
Kommentar von René
Ich diversen Tutorials habe ich gelesen, daß readfile zwar kürzer im Code ist, aber der direkte Weg über fopen performanter sein soll (lasse mich auch gerne von Gegenteil überzeugen).
Kommentar verfassen
Bisherige Trackbacks (0)
Es wurde noch kein Trackback empfangen!