Login
Newsletter
Werbung

Fr, 28. Juli 2000, 00:00

PHP Workshop: Include und Require

PHP Workshop: Include und Require.

Einführung

Um PHP- oder HTML-Code aus anderen Dateien in ein PHP-Skript einzubinden, gibt es in PHP die beiden Anweisungen include() und require().

Jeder Aufruf der require-Anweisung wird durch den Inhalt der einzubindenden Datei ersetzt (vergleichbar mit #include in C). Bei jedem Aufruf der include-Anweisung wird stattdessen die angegebene Datei jedesmal neu in das Skript geladen. Dadurch ist es möglich, die include Anweisung innerhalb von Schleifen oder if-Konstrukten zu verwenden. Die require-Anweisung hat stattdessen den Vorteil, dass sie schneller ist als die include-Anweisung.

Einfacher Aufruf von require

config.inc.php:

$dbname = "MeineDatenbank";
$dbuser = "MeinUsername";
$dbpass = "MeinPasswort";

reqtest.php:

require("config.inc.php");
echo "Datenbankname: $dbname<br>Username: $dbuser<br>Passwort:
$dbpass"

Die Konfigurationsdatei wird per require eingebunden, und die dort definierten Variablen werden ausgegeben. Solche include-Dateien werden, wie im Beispiel angedeutet, gerne verwendet, um Konfigurationsinformationen wie Datenbankpasswörter und ähnliches zu speichern. Wenn sich beispielsweise die Passwörter ändern, muss man sie nur in einem einzigen Skript ändern. Man kann natürlich nicht nur Dateien mit Variablen, sondern auch mit Funktions- und Klassendefinitionen einbinden (beide Themen werden im nächsten Workshop Teil behandelt). Aber auch das Einbinden von HTML-Code ist kein Problem.

HTML-Templates per include

Beispiel 1:

Ein Aufgabengebiet, wofür sich die include-Anweisung besonders eignet, sind einfache HTML-Templates. Jeder, der schon mal eine Navigationsleiste für eine Website mit Hilfe einer Tabelle erzeugt hat, weiß, wie aufwendig es ist, eine solche Seite zu erweitern. Wenn man eine HTML-Seite hinzufügen will, dann muss man zumindest die Tabelle für die Navigationsleiste per Copy&Paste in jede neue Datei übernehmen. Schlimmer wird es, wenn man die Navigationsleiste um einen oder mehrere Links erweitern möchte. Man muss dann die Navigationsleiste in allen HTML-Dateien ändern. Stattdessen kann man den HTML Code für die Navigationsleiste aber auch in eine eigene Datei schreiben und diese Datei in jeder anderen Datei an der Stelle includen, wo sich die Navigationsleiste befinden soll.

navbar.html:

<a href="../index.html">Home</a>
<br>
<a href="../foo.html">Foo</a>
<br>
<a href="../bar.html">Bar</a>

Hier wird der Inhalt der Navigationsleiste definiert.

navtest.php:

<html>
<head>
<title>Einfaches HTML Template mit PHP</title>
<head>
<body bgcolor="#ffffff">
<table width="100%">
<tr>
 <td width="20%"><?php
include("navbar.html")?></td>
 <td>Hier steht der Text ...</td>
</tr>
</table>
</body>
</html>

Eine Beispiel-HTML-Datei. Sie inkludiert die Navigationsbar und enthält einen Beispieltext. Man kann sie natürlich auch mit richtigem Inhalt füllen ;)

Beispiel 2:

Nun ist es also möglich, Änderungen an der Navbar zu machen, ohne dafür jede einzelne HTML-Datei ändern zu müssen. Leider muss man immer noch für jede neue HTML-Datei ein eigenes HTML-Grundgerüst mit den entsprechenden Rahmentabellen und der includeAnweisung anlegen. Das lässt sich mit folgendem Beispiel aber leicht ändern:

navtest2.php:

<html>
<head>
<title>Einfaches HTML Template mit PHP</title>
<head>
<body bgcolor="#ffffff">
<table width="100%">
<tr>
 <td width="20%">
 <a href="../<?php echo $PHP_SELF?>?topic=home">Home</a>
 <br>
 <a href="<?php echo $PHP_SELF?>?topic=foo">Foo</a>
 <br>
 <a href="<?php echo $PHP_SELF?>?topic=bar">Bar</a>
 </td>
 <td align="left">
 <?php
 if (!isset($topic))
 {
 $topic = "home";
 }
 include("./topics/$topic.html");
 ?>
 </td>
</tr>
</table>
</body>
</html>

Erklärung:

<a href="<?php echo $PHP_SELF?>?topic=foo">Foo</a>

Link in der Navigationsleiste. Die Variable $PHP_SELF enthält den Dateinamen des PHP-Skripts. Wenn der User den Link anklickt, ruft das Skript sich selbst auf und übergibt die Variable $topic mit dem Wert "foo".

if (!isset($topic))
{
 $topic = "home";
}
include("./topics/$topic.html");

Wenn die Variable $topic nicht existiert (die Datei wurde mit z.B. mit navtest2.php statt navtest2.php?topic=home aufgerufen), dann wird ihr der Wert "home" zugewiesen. Danach wird die Datei mit dem eigentlichen Inhalt der Seite inkludiert. Sie muss in diesem Beispiel im Unterverzeichnis topics liegen und auf .html enden. Nun kann man den eigentlichen Content im Unterverzeichnis topics ablegen.

Diese Dateien sollten übrigens keinen Dateikopf (<html>, <head>, <body> usw.) enthalten, da dieser ja schon in der Template-Datei vorhanden ist und sie sonst doppelt vorhanden wären. Das sorgt nicht nur für unschönen HTML-Code, sondern bereitet manchen Browsern auch ernsthafte Probleme.

Die Beispiele stehen selbstverständlich auch zum Download bereit.

Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung