Code einbinden mit include()

Code einbinden mit include()

Wenn ihr eure Website noch traditionell mit HTML & CSS erstellt anstatt ein CMS zu verwenden, kennt ihr sicher das Problem. Bei einer Änderung, die für alle Seiten gilt, müsst ihr diese auch alle einzeln ändern. Bei einigen wenigen Seiten mag das noch machbar sein, spätestens bei 10 oder mehr Seiten artet das aber in echte Arbeit aus. Ein Editor wie z. B. Notepad++, der dateiübergreifendes Suchen und Ersetzen unterstützt, reduziert diesen Aufwand zwar bereits erheblich. Noch eleganter ist aber die Auslagerung des Codes mit anschließender Einbindung durch die php-Funktion include().

include() für die Navigation verwenden

Mit include() könnt ihr eine Datei importieren, deren Code genauso ausgeführt wird wie wenn er direkt auf der Seite eingebunden wäre. Ein klassisches Beispiel für einen Code, der in allen Seiten zur Verfügung stehen soll, ist die Haupt-Navigation. In der Regel soll diese überall gleich angezeigt werden und auch Änderungen sollen in allen Dateien gleichzeitig vorgenommen werden.

Um dies zu erreichen, lagert ihr die komplette Navigation zuerst in einer Datei aus:

Datei navigation.html

<ul>
<li><a href="http://www.example.com">Home</a></li>
<li><a href="http://www.example.com/tolleseite.php">Tolle Seite</a></li>
<li><a href="http://www.example.com/urlaub/bilder.php"></a>Urlaubsbilder</li>
<li><a href="http://www.example.com/impressum.php"></a>Impressum</li>
</ul>

Wichtig hierbei ist, dass ihr die Adressen absolut adressiert, also mit Angabe der Domain. Sonst kann es vorkommen, dass die Seiten nicht gefunden werden und ein Error 404 angezeigt wird.

In den Seiten, in denen ihr die Navigation einbauen wollt, braucht ihr dann nur noch die include-Funktion aufzurufen:

Datei tolleseite.php

<?php include ("navigation.html"); ?>

Änderungen braucht ihr ab sofort nur noch in der navigation.html vorzunehmen, damit sie auf allen Seiten erscheinen.

Wichtig sind dabei 2 Dinge:

1. Euer Webspace muss PHP unterstützen (ist inzwischen der Normalfall).
2. Die Dateien, in denen die include-Funktion eingebunden sind, müssen die Endung .php haben. Ausnahme: Durch folgenden Eintrag in der .htaccess könnt ihr auch andere Endungen wie z. B. .html verwenden:

AddHandler application/x-httpd-php .html

Header mit Include einbinden

Header mit include() einbinden

Auch der Header, also der Bereich von <head> bis </head>, beinhaltet viele Aufrufe, die in allen euren Dateien gleich sind (z. B. DOCTYPE). Allerdings gibt es auch Angaben wie den Seitentitel, die Seitenbeschreibung und den robots-Tag, die ihr individuell gestalten solltet. Deshalb solltet ihr den Header nur teilweise auslagern:

Datei myheader.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<link rel="stylesheet" type="text/css" href="style.css" />
<link rel="shortcut icon" href="favicon.ico" />

In eurer Seite stehen dann nur noch der include-Aufruf und die individuellen Auszeichnungen.

Datei tolleseite.php

<?php include ("my-header.html"); ?>
<title>Titel meiner Seite</title>
<meta name="description" content="Beschreibung meiner Seite" />
<meta name="robots" content="index,follow" />
</head>

Weitere Anwendungen für include()

Neben der Auslagerung der Navigation und des Headers könnt ihr include() auch noch für folgende Zwecke verwenden:

  • Einbau einer Headergrafik
  • Einbau eines Suchfeldes
  • Einbau von Werbung
  • Einbau eines Footers

Je öfters ihr die include()-Funktion in euren Seiten einsetzt, desto weniger Pflegeaufwand habt ihr in Zukunft.

include() oder readfile()?

Auch mit der readfile()-Funktion könnt ihr ausgelagerte Dateien in eure Seiten einbinden. Der Vorteil ist, dass diese Funktion wesentlich schneller ausgeführt wird und weniger Speicher als include() verbraucht (Quelle: Raditha.com).

Allerdings hat readfile() den Nachteil, dass nur reine Texte importiert werden können. In der Auslagerungsdatei enthaltene php-Befehle werden nicht ausgeführt. Da es durchaus vorkommen kann, dass auch reine Textdateien irgendwann mal um php-Befehle erweitert werden sollen, habe ich mir angewöhnt, auf readfile() zu verzichten und verwende ausschließlich die include()-Funktion.

include() auf euren Seiten

Verwendet ihr auch die include()-Funktion auf euren Seiten? Falls ja, welchen Code bindet ihr damit ein? Schreibt doch bitte in den Kommentaren etwas dazu.

Veröffentlicht von

Cujo

Die Webmaster-Zentrale wurde im Januar 2010 von mir gegründet. Dabei haben mich 3 Internetauftritte maßgeblich beeinflusst. Zum einen die Website des t3n-Magazins, www.t3n.de, auf der immer sehr interessante Artikel zum Thema Webseitenerstellung gepostet wurden. Genau solche Artikel wollte ich auch schreiben. Dann bin ich schon seit mehreren Jahren im Homepage-Forum, www.homepage-forum.de, aktiv. Im Laufe der Zeit stellte ich fest, dass dort immer die gleichen Fragen gestellt wurden. Jedesmal darauf die gleichen Antworten zu geben, war erstens langweilig, zweitens zeitraubend und drittens hat es sich nicht gelohnt, die Fragen ausführlich zu beantworten. In der Webmaster-Zentrale greife ich jetzt oft Fragen auf, die im Homepage-Forum gestellt wurden und habe die Möglichkeit die angesprochenen Themen viel detaillierter zu behandeln. Bei wiederkehrenden Fragen poste ich dann einen Link zu einem Artikel in der Webmaster-Zentrale. Dadurch erhalten die User ausführlichere Antworten als normalerweise in einem Forum üblich. Die Idee, Informationen bereitzustellen und diese im Forum zu verlinken, habe ich von Daniel, www.homepage-faqs.de, übernommen. Daniel bezeichnet sich selbst als Forenhelfer und ist sehr aktiv im Homepage-Forum. Er hat schon zahllosen Usern mit seinen Informationen geholfen und ihnen die Grundlagen der Webseitenerstellung erklärt. Diese 3 Webauftritte hatten einen so großen Einfluss auf mich, dass ich sicher behaupten kann, dass es ohne sie die Webmaster-Zentrale nicht geben würde.

9 Gedanken zu „Code einbinden mit include()“

  1. Hi du,

    include ist ja ganz nett, besser ist es aber mit require( ) umzusetzen, da man hier sofort sieht, wenn irgendwas nicht verfügbar ist. Damit habe ich meine Seite aufgebaut und es läuft super. Zusätzlich sehe ich sofort, wenn ich vergessen habe, eine Datei auf den Server zu laden, denn dann meckert meine Webseite darüber 😉

    Gruß,
    Sven

  2. Ja, mit include habe ich auch noch zu meinen Anfangszeiten gearbeitet. Vorsicht ist allerdings geboten, wenn man mit Variablen im Include arbeitet. Vielleicht ergänzt du das ganze hier nochmal mit einem Artikel. Dürfte sicherlich hilfreich sein.

    Viele Grüße,
    Michael

  3. @Sven Das ist nicht ganz richtig. Auch include() zeigt nicht verfügbare Dateien an. Dies allerdings als Warnung, so dass das Skript nachher fortgesetzt werden kann. Der Vorteil von include() ist, dass dadurch eventuell noch weitere Fehler angezeigt werden können, während require() nach dem ersten Fehler abbricht. Wen das nicht stört kann aber natürlich auch require() anstatt include() verwenden.

  4. @Michael Karl
    **** mit Variablen im Include arbeitet ***
    Wo ist da das Problem?
    Wennman mehrere Orte (Dateien) hat, welche die selbe $Variable nutzen, und sich dadurch gegenseitig überschreiben?

    ***meine index.php****
    $DCkill_ = $_SERVER[‚HTTP_HOST‘] . $_SERVER[‚REQUEST_URI‘];

    include(‚cms800/cms800ini.php‘);
    include(‚cms800/cms800.php‘);
    header(„HTTP/1.1 200 OK“);
    include(„cms800/cms800request.php“);
    include(‚cms800/cms800filer.php‘);
    if ( $DCkill && strcmp($DCkill,$DCkill_) )
    { make301($DCkill); exit();
    } echo( $tbuf );
    *******************************************

    in „request.php“ wird die URL zerteilt
    in „filer.php“ werden
    1. SELECT * FROM Domain
    2. SELECT * FROM Path
    3. SELECT * FROM File

    Die Inhalte aus der DB ausgelesen
    Alle Domains in einem Webspace, werden über die selbe index.php abgewickelt

    in der „Path“ DB ist das Template angeben, welches nach $tbuf geladen wird
    dann werden Platzhalter via str_replace gegen ihre Inlahte ausgetauscht

    und am Ende geht alles über einen „Echo“ raus
    ausser es wurde festgestellt das die requestete URL nicht so ist wie sie sein soll, dann einen Redirekt auf die richtige URL

    @Cujo
    **Wichtig hierbei ist,**
    „JA“ zu **Adressen absolut adressiert***
    „NEIN“ zu **also mit Angabe der Domain**

    Wichtig ist, das die URLs mit dem „/“ beginnen
    das ist „Absolut“ und genügt absolut

    und bei Eurem Weg kann sich nochd as Problem ergeben
    wenn in einer „geincludeten“ Datei ein Weiterer include ist

    z.B.
    domain.tld/Album/Andy/view.php
    domain.tld/Album/Andy/Atari/view.php

    es gibt in der „view“ einen include auf „../Anzeige.php“
    abgelebt unter
    domain.tld/Album/Anzeige.php

    das funktioniert
    „Ja“ @ /Album/Andy/view.php
    „Nein“ @ /Album/Andy/Atari/view.php

    innerhalb von PHP ist wichtig „welches war die erste Datei“
    früher fürte das bei mir schonmal zu Problemen
    nun ist es immer die /index.php

  5. Mein Homepage ist mit WordPress umgesetzt, aber auf fotografr.de arbeite ich mit include.
    Dort werden Header, Navigation und Footer damit eingebunden.

    Eine weitere gute Möglichkeit, zum Beispiel die Navigation oder den Header bei einer größeren Anzahl von Dateien einer ganzen Site zu ändern ist das Programm „Advanced Find and Replace“. Das setze ich auch ein.

  6. Modularität ist eigentlich meistens einer fixen Struktur vorzuziehen, aber natürlich muss man dann auch auf einige Dinge achten.

    Besonders vorteilhaft ist, dass die einzelnen Seitendokumente deutlich schlanker werden und man im Falle eines Problemes sich durch weniger Code wälzen muss.

  7. Ich nutze auf meiner Seite ebenfalls den include()-Befehl.
    1. Für die allgemeinen Angaben im Header
    2. Für die Kopfzeile
    3. Für das Menue
    4. Für den Footer

    So ist es ehr übersichtlich und, wie Du schon schreibst, sehr Änderungsfreundlich.

  8. Ich nutze ebenfalls include… Leider ist mir noch nicht ersichtlich geworden, ob dies auch SEO komform ist. Kann mir evtl. jemand sagen, ob die Suchmaschinen den ausgelagerten Bereich ebenfalls mit der Seite in Verbindung bringen in der er eingebunden ist? Oder kann es passieren, dass ein User von goolge auf der Seite landet in der die Inhalte mit include ausgelagert sind?

    Ansonsten echt schöner Thread…

    Viele Grüße
    Carsten

  9. @Carsten Da die Dateien ja durch deinen Webserver eingebunden werden bekommt ein Nutzer, sowie auch Google nichts davon mit. Der „include()-Teil“ wird ja durch den Inhalt der eingebetteten Datei ersetzt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.