php-homepage.com

PHP Include

update 21.02.2017
Auch mit PHP 7 hat sich bei den includes nichts gravierendes verändert, es ist nach wie vor eine bequeme, sichere Methode zur Einbindung von PHP Code bzw. Scripts. Vorausgesetzt natürlich die Einbindung erfolgt über konkrete Files und keine Url Parameter oder dergleichen,
über die man selbst keine Kontrolle hat!
"Vertraue niemals Benutzeingaben!!!"

Mit php include sehen wir uns eine erste, sehr komfortable Funktion von PHP an. Es bietet die Möglichkeit, Dateien, bzw. deren Inhalt direkt einzubinden. Sei es einfach ein vorgefertigtes script, das wir mehrmals an unterschiedlichen Orten aufrufen,
oder etwa ein html-Dokument, das wir als Teil des aufrufenden Dokuments einbinden wollen,
ein "besserer" Ersatz für frames sozusagen.
php include zur Einbindung verschiedener Module in eine Webseite:

PHP include einfaches Beispiel
Einfach Mehrspaltiges Layout mit PHP include realisiert

Die Grafik zeigt ein Beispiel, wie eine Seite aufgebaut werden kann. Die einzelnen Blöcke sind eigenständige Module und werden mit der php Funktion "include" eingebunden. Dies hat den Vorteil, dass man zB. einen "header" also Kopfbereich hat, der auf sämtlichen Unterseiten der Domain gleich sein soll. Man bindet also den vorbereiteten "header" in jeder Unterseite der Domain mittels include ein.
Der eigentliche Vorteil ist aber, dass man Beispielsweise for "content" Inhalte dynamisch erzeugen kann und diese dann in die Seite mit vorgefertigtem "header", "footer", usw. einfügen kann. Dies mag momentan etwas verwirrend klingen, aber im Rahmen des php-tutorials werden wir uns Schritt für Schritt an die wichtigsten Funktionen in php heranarbeiten:-)

Datei mittels php include einbinden:

Nehmen wir wieder unser Beispiel mit dem Html Grundgerüst und binden dort mittels include(); eine Datei ein, die den Kopfteil unserer Seite beeinhaltet - zB. einen Logoschriftzug, ein Banner, usw.
Dazu müssen wir natürlich zuerst eine Datei mit einem Logo erzeugen, nennen wir sie einfach "logo.php" und speichern sie zwechs Übersicht in in das Verzeichnis /includes/.

logo.php

<h1>Logoüberschrift</h1> Diese "Logoüberschrift"
(zum leichten Verständnis reicht uns einfach dieser Text, man könnte so natürlich auch alles einbinden was mit php und html möglich ist, Grafiken usw.)
binden wir nun mit include in unsere Seite ein:

index.php

<!DOCTYPE html>
<head>  
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<title>Dokument-(Seiten) Titel</title>
</head>
<body>     
< ?php
include 'includes/logo.php';
?></body>
</html>

                

Wichtig ist in erster Linie, dass man genau weiß, was eingebunden wird.( In diesem Fall die Datei "logo.php" aus unserem /includes/ -Verzeichnis)
Diese Methode ist absolut sicher, da der Benutzer keinen Einfluss darauf hat, was eingebunden wird.

Natürlich könnte man auch mit URL-Parametern arbeiten, oder die eingebunde Datei mittels Funktionen ermitteln,...
Dies erfordert aber mehrere Sicherheitsabfragen und Maßnahmen, um das Einschleusen von Fremd-(Schad-) Code zu verhindern.

Pfade in PHP

Die Verlinkung von Ressourcen bzw. Dateien verhält sich in PHP etwas anders als etwa in Html oder CSS!
Während man Html Dokumente immer realtiv vom root (Wurzelverzeichnis des aktuellen Webspaces)angibt: <a href="/verzeichnis/datei.html" Und nicht etwa mit ../, ../../, ../../../ usw., wie ich es bei Joomla Projekten gesehen habe.
relative Verlinkung hat eine Menge Vorteile (Arbeiten an live-Seite oder lokal, bzw. Serverumzüge haben keinen Einfluss auf die Verlinkung.
Aber bitte dann mit gemeinsamen Nenner, sprich Wurzelverzeichnis.

Geht PHP weiter und interpretiert / als das "echte" Wurzelverzeichnis am Server.
bei komplexeren Verzeichnisstrukturen müsste man sich also jedesmal den Kopf zerbrechen, welches PHP Script was von wo aus einbindet...
Abhilfe schafft entweder:

Ich persönlich bevorzuge letzteres, auch wenn die globale Servervariable Document_Root
angeblich nicht bei allen Hostern gesetzt sein soll.
Habe ich selbst auf >20 Domains und diversen Servern/Hostern noch nicht erlebt. Wenn es doch mal vorkommen sollte:Netbeans "im Projekt suchen und ersetzen:":)