Andere PHP Dateien einbinden
In den vorherigen Tutorials habt ihr die wichtigsten Grundlagen im Umgang mit PHP gelernt. Zum Abschluss unserer Einführung erhaltet ihr hier noch Tipps, wie ihr euren Programmcode sauber strukturieren könnt.
Website in mehreren Dateien aufteilen
In PHP existieren einige Funktionen, womit ihr eure Scripts auf mehrere Dateien aufteilen könnt. Dies ist in vielen Fällen sehr hilfreich. Angenommen ihr habt eine Homepage mit dutzenden oder hunderten Unterseiten. Wenn ihr jetzt einen Eintrag im Menü verändert wollt, dann müsst ihr alle Seiten verändern. Dies ist natürlich ziemlich aufwendig. Stattdessen empfiehlt es sich, die verschiedenen Bereiche eurer Homepage (Header, Menü, Footer) irgendwo zentral in einer Datei zu definieren und später dieses einfach auszugeben. Eine Veränderung am Menü müsste so nur in einer Datei durchgeführt werden und würde dann überall angezeigt werden. Mit PHP ist dies zum Glück sehr einfach.
In PHP existieren die Funktionen include($filename) und require($filename) die es euch erlauben Code aus einer anderen Datei zu laden. Falls die Datei nicht gefunden wird, dann gibt include() nur eine Warnung aus, während bei require() der weitere Scriptablauf abgebrochen wird. Welche der beiden Funktionen ihr verwendet ist in den meisten Fällen egal.
Um eine Homepage zu strukturieren könnt ihr nun gut folgenden Code verwenden:
header.php
1 2 3 4 5 6 7 8 9 |
<!doctype html> <html> <head> <meta charset="utf-8"> <title>Meine Website</title> <style> .content {border: 1px solid #000000;} </style> </head> |
menu.php
1 2 3 4 5 6 |
<body> Menu: <ul> <li><a href="seite1.php">Seite 1</a></li> <li><a href="seite2.php">Seite 2</a></li> </ul> |
footer.php
1 2 3 |
Footer: <a href="impressum.php">Impressum</a> | <a href="contact.php">Kontakt</a> </body> </html> |
seite1.php:
1 2 3 4 5 6 7 8 9 |
<?php include('header.php'); include('menu.php'); ?> <div class="content">Hier steht der Inhalt von Seite 1</div> <?php include('footer.php'); ?> |
seite2.php:
1 2 3 4 5 6 7 8 9 |
<?php include('header.php'); include('menu.php'); ?> <div class="content">Hier steht der Inhalt von Seite 2</div> <?php include('footer.php'); ?> |
Um nun das Menü zu verändern, müssen wir nur die menu.php anpassen und schon haben wir auf allen Unterseiten das neue Menu.
Komplexe PHP-Scripts in mehrere Dateien aufteilen
Ob ihr in die Dateien die ihr per include/require ladet nun HTML Code drin stehen habt oder ob ihr PHP-Code stehen habt, ist egal. Falls ihr PHP-Code darin stehen habt solltet ihr bedenken, dass der Code aus der anderen Datei "rauskopiert" wird und dann im neuen Script ausgeführt wird. Dies hat Vor- und Nachteile: Ihr könnt so z.B. bequem Konfigurationsvariablen definieren, die ihr überall verwendet. Problem ist wenn ihr in beiden Scripts die gleichen Variablen verwendet, dann können die sich gegenseitig überschreiben.
Im folgenden ein Beispiel:
seite1.inc.php:
1 2 3 4 5 |
<?php $config = array("min_password_length" => 8, "max_password_length" => 16); $username = "Dieter"; ?> |
seite2.php:
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php if(isset($_GET['username'])) { $username = $_GET['username']; } else { $username = "Gast"; } require('seite1.inc.php'); echo "Hallo $username, dein Passwort sollte zwischen ".$config['min_password_length']." und ".$config['max_password_length']." Zeichen besitzen"; ?> |
Wie ihr feststellen werdet, überschreibt seite1.inc.php den Wert der Variable $username. Dies hat in diesem Fall unangenehme Nebenwirkungen. Deswegen findet ihr nachfolgend ein paar Tipps, wie ihr größere Scripts in mehrere Dateien aufteilen könnt.
- includes am Anfang des Scripts - Die includes und requires sollten immer ganz am Anfang des Scripts stehen, in dem obigen Fall sollte also require vor der if-Anweisung stehen. So verhindert ihr, dass Variablen durch das include überschrieben werden. Ausgenommen sind hier höchstens Seiten die nur HTML Code ausgeben, wie im Beispiel davor der Footer der Website.
- Klare Trennung zwischen Dateien die per include geladen werden und solchen, die direkt aufgerufen werden - Ihr solltet klar trennen zwischen Dateien die ihr per include laden wollt und solchen, die der Besucher direkt aufrufen möchte. Um dies klar zu machen, empfiehlt es sich Dateien die man per include lädt mittels der Dateiendung .inc.php zu kennzeichnen. Oft empfiehlt sich auch ein eigene Order in dem ihr alle eure include-Dateien abspeichert. Seid euch aber immer bewusst, eure Besucher können eure include-Dateien auch per Browser direkt aufrufen wenn sie die URL entsprechend anpassen.
- Häufig und zentrale Funktionen in eigene Dateien auslagern - Funktionen und Variablen die ihr häufig und an verschiedenen Stellen benötigt solltet ihr als eigene Datei auslagern und diese dann per include laden. Typische Beispiele sind eine config.inc.php um zentrale Konfigurationswerte zu speichern, eine database_connection.inc.php um die Verbindung zur Datenbank aufzubauen und eine functions.inc.php die eure selbstgeschrieben Funktionen beinhaltet.