Folien



(letzte Synchronisation der PDF-Präsentation: 02.03.2017)

Falls keine PDF-Präsentation zu sehen ist, klicken Sie zum Download hier: Direktdownload PDF-Präsentation

Wir können die Inhalte von Dateien in ein PHP-Skript einbinden. Dazu verwenden wir include() oder require().

Der Befehl require('irgendeinedatei.txt') wird komplett durch den Inhalt der Datei irgendeinedatei.txt ersetzt (gleich bei include(), s.u.).

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. (pro-linux.de – PHP-Workshop)

Unterschied zwischen include und require

Wenn ein include einen Fehler produziert, arbeitet das Skript weiter (und spuckt nur eine Warnung aus) – bei require bricht es ab (mehr: php.net – Manual zu require).

Das liegt daran, dass bei require der php-Code ersetzt wird. In einer Schleife wird der Code damit möglicherweise nur einmal ersetzt ($bla = $schleifenvariable . "_einbinden.inc"; require($bla);. (Beispiel bei dynamic-webpages.de)

Da wir erst mal nur Klassendateien einbinden (und zwar nur einmal), verwenden wir deshalb vorerst nur require_once. require_once stellt (im Gegensatz zu require) sicher, dass eine bereits eingebundene Datei nicht ein weiteres Mal eingebunden werden kann.

PHP-Anweisungen in include-/require-Dateien

Die inkludierte Datei wird als HTML-Code ausgeführt. Wird also PHP-Code inkludiert, muss dieser in der eingebundenen Datei entsprechend gekennzeichnet werden (durch <?php bzw. ?>).

Syntax:

PHP-Code
  include ("datei.txt"); require_once("config.inc.php");  

Zum Testen des Includes kann am Schluss noch eine Zeile wie

PHP-Code
  echo "Datei erfolgreich eingebunden!<br />\n";  

eingefügt werden.

Übungen

Alle Übungen finden Sie in der Materialsammlung (dort auch alle zusätzlichen Dateien wie Bilder, Klassendiagramme oder HTML-Vorlagen!).

Die aktuelle Übung können Sie hier als txt-File herunterladen.


***** Übungen: Dateien mit require/include einbinden *****

php_21-1) Was zeigt der Browser an?

Gegeben sei eine Datei "test.php" und eine Datei "include.txt":

test.php:

PHP-Code
<h1>Überschrift</h1> <?php require_once('include.txt'); echo "<p>Danke.</p>"; ?>  

include.txt:

HTML-Code
<p>Ich bin die include-Datei include.txt.</p>  

Was wird im Browser angezeigt?

 




php_21-2) Was zeigt der Browser an?

Gegeben sei eine Datei "test.php" und eine Datei "include.txt":

test.php:

PHP-Code
<h1>Überschrift</h1> <?php require_once('include.txt'); echo "<p>Danke.</p>"; ?>  

include.txt:
HTML-Code
Ich bin die include-Datei include.txt.  

Was wird im Browser angezeigt?




php_21-3) Was zeigt der Browser an?
Gegeben sei eine Datei "test.php" und eine Datei "include.php":

test.php:
PHP-Code
<h1>Überschrift</h1> <?php require_once('include.php'); echo "<p>Danke.</p>"; ?>  

include.php:
PHP-Code
<?php for ($a=0;$a<10;$a++) { echo $a . "<br />"; } ?>  

Was wird im Browser angezeigt?




php_21-4) Dateien auslagern
Gegeben sei folgendes Listing:

PHP-Code
<?php if (isset($_GET['absenden']) && isset($_GET['sternzeichen'])) { $sternzeichen = $_GET['sternzeichen']; switch ($sternzeichen) { case 'Steinbock': // Anweisungsblock 1 Start $msg1 = "Sie sind ein Steinbock. Ihnen gef&auml;llt es, wenn dieser Satz 6 mal ausgegeben wird.<br />"; for ($a=1;$a<=6;$a++) { echo $a . "." . $msg1; } // Anweisungsblock 1 Ende break; case 'Widder': // Anweisungsblock 2 Start echo "Sie sind ein Widder. Als Widder gefallen Ihnen die ungeraden Zahlen. Bittesch&ouml;n:<br />"; for ($a=1;$a<100;$a=$a+2) { echo $a . " "; } // Anweisungsblock 2 Ende break;   case 'Elefant': // Anweisungsblock 3 Start echo "Es gibt kein Sternzeichen \"Elefant\"!!!"; // Anweisungsblock 3 Ende break; default: echo "Bitte geben Sie eines der vorgegebenen Sternzeichen ein."; } } ?> <form action = "<?php echo $_SERVER['PHP_SELF'] ?>" method = "get"> Geben Sie hier Ihr Sternzeichen ein (Steinbock, Widder, Elefant): <input type = "text" name = "sternzeichen" /> <input type = "submit" name = "absenden" /> </form>    

Lagern Sie die drei Anweisungsblöcke in der switch-Verzweigung in drei verschiedene Dateien aus.





php_21-5) Klassen auslagern
Gegeben sei folgendes Listing:

PHP-Code
<?php // hier kommen die require_once()-Befehle rein ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Startdatei</title> </head> <body> <h1>Hier findet Klassen-Action statt.</h1> <?php   class etwasAusgeben {   // Attribute private $zufaelligerSpruch; private $zufallszahl; private $sprueche = array( "Ich bin ein lustiger Spruch.", "Morgen regnet es vielleicht.", "Guten Tag, ich bin der Regenmacher." );   // Konstruktor function __construct() { $this->zufallszahl = rand(0, (count($this->sprueche) - 1)); echo "<p>Ich bin der Konstruktor der Klasse etwasAusgeben.<br /> Ich habe eine Zufallszahl gewuerfelt, naemlich " . $this->zufallszahl . "</p>"; }   // Methoden public function getZufallszahl() { return $this->zufallszahl; }   public function erzeugeZufaelligenSpruch() { return $this->sprueche[$this->zufallszahl]; // alternativ: return $this->sprueche[$this->getZufallszahl()]; }   public function spruchAusgeben() { echo $this->erzeugeZufaelligenSpruch(); }   }   class ueberschriftErzeugen {   // Attribute private $text; private $zahl;   // Konstruktor function __construct($eineZahl) { if($eineZahl<2) { exit("zahl muss 2 oder groesser sein"); } else { $this->zahl = $eineZahl; }   }   // Methoden public function zahlenReiheErzeugen() { $ausgabe = ''; for($i=1;$i<=$this->zahl;$i++) { $ausgabe .= $i; } return $ausgabe; } public function ueberschriftKomplettErzeugen() { $ersterteil = "Zahlenkolonnen&uuml;berschrift Nummer "; $zweiterteil = $this->zahlenReiheErzeugen(); return $ersterteil . $zweiterteil; }   }   $spruchgenerator = new etwasAusgeben(); $spruchgenerator->spruchAusgeben(); echo "<hr />"; $ueberschrift = new ueberschriftErzeugen(12); echo "<h1>" . $ueberschrift->ueberschriftKomplettErzeugen() . "</h1>"; ?> </body> </html>  

a) Versuchen Sie zu verstehen, was das Skript macht.
b) Überprüfen Sie, ob das Skript funktioniert.
c) Lagern Sie die Klassen aus (zahlenreihe.class.php und spruch.class.php) und binden Sie sie mit require_once() ein. Überprüfen Sie, ob das Skript weiterhin läuft.