Einbinden von Dateien - include versus require

Der PHP-Befehlt include bzw. require ist sehr praktisch, um Module bzw. Funktionslibraries zuzuladen oder HTML-Bereiche, die für mehrere Seiten gleich sind.

PHP-Quellcode: include versus require
<?php
require 'sicherheitsabfrage.php';
include 'html-bereich-kopf.htm';

Dabei sollte man stets bewusst, sich für die passende Form entscheiden.

Verwendung von include versus require

Fallbeispiel: Nehmen wir an, bei jeder PHP-Seite wird am Anfang die Datei für die Authentifizierungsabfrage eingebunden. Dabei sollte man dann unbedingt require nutzen und nicht include. Warum require: Findet das Programm die einzubindende Datei nicht vor, bricht es ab. Die Datei wird unbedingt benötigt (was so das englische Wort „require“ einem nahe legt). Besser man hat einen Abbruch, als eine sehr undefinierte Programmausführung.

Dateien, die für die korrekte Programmausführung nicht "wichtig" sind, können über include eingebunden werden. Das wären z.B. HTML-Dateien, in denen Inhalte und Design stecken. Würden diese fehlen, wäre die Seite zwar nicht mehr schön anzusehen, aber funktioniert weiterhin.

Endung der eingebundenen Dateien

.php ist die Endung der einzubindenden Datei!

Teilweise habe ich auf verschiedene Seiten schon den Hinweis gelesen, dass Dateien, die eingebunden werden sollen, die Endung „.inc“ erhalten sollen. Blödsinn!! Diese Dateien müssen die Endung „.php“ haben. Wenn es unbedingt notwendig ist, dass man erkennt, dass es sich um eine einzubindende Datei handelt, kann auch die Endung in Form von „einzubindendedatei.inc.php“ genutzt werden.

Die fiktive Datei, in der die fiktiven Zugangsdaten für die fiktive MySQL-Datenbank stehen, ist im ersten Beispiel direkt im Klartext zu lesen. Bei diesem Server sind die .inc-Dateien nicht gesperrt. Beim zweiten Server sind diese Dateiendungen gesperrt für den direkten Zugriff von außen. Bei der dritten Datei erfolgt keine Anzeige, da diese von PHP wegen der Endung interpretiert wird - nicht ideal, aber immer noch besser als die ersten 2. Der Unterschied zwischen dem ersten Server und dem zweiten Server ist, dass hier der Hoster den Zugriff auf die Dateien gesperrt hat (Error 403 - Forbidden), in der Annahme, dass die eigenen Kunden eh nicht wissen, was sie tun und man lieber von Haus aus mehr Sicherheit zwangsweise mitgibt.

Die Datei hat den fiktiven Inhalt (zu Demonstrationszwecke):

PHP-Quellcode: Beispiel
<?php
// dies ist nur ein fiktives Beispiel für eine falsche 
// Dateiendung!!
 
function kennwort_kontrollieren ( $eingabe, $kontrolle )
{
  // und hier rein fiktive Zugangsdaten, die so die Welt 
  // eigentlich nicht erfahren sollte, wenn das ein richtiges 
  // Projekt wäre
  $db = new mysqli("publichost", "nobody", "somebody");
 
  if ( $eingabe == $kontrolle )
  {
    // ...
  }
}
?>

Denn Dateien mit der Endung .inc oder der Endung .txt (usw.) können bei Kenntnis vom Namen einfach im Browser aufgerufen werden. So bekommt der Nutzer direkt den Inhalt angezeigt und kann sich über die gewonnenen Informationen u.U. schnell einen Zugang schaffen.

Besser ist, wenn zusätzlich diese Dateien in nicht öffentlichen Verzeichnisse geschoben werden. Dazu mehr im folgenden Kapitel.