PHP: Unterschiede zwischen include, include_once, require und require_once

In PHP gibt es mehrere Möglichkeiten um Dateien einzubinden.

Neben include und include_once, gäbe es da auch noch das gleiche mit require. Doch was ist der Unterschied?

Die Funktionen

Egal welche der Funktionen du nutzt. Sie funktionieren im Prinzip ähnlich.

Du kannst auch externe PHP Dateien über HTTP einbinden, dafür muss allerdings fopen-URL-Wrapper in der php.ini aktiviert sein.

Doch Achtung: Dies sollte nur getan werden, wenn du dem Skript absolut vertraust, theoretisch könnte sonst jemand den bisher so hilfreichen Code zu einem bösartigen ändern und deinen Webserver – weil dieser ja den PHP Code ausführt – angreifen. Hier ist also Vorsicht geboten.

Nehmen wir an, du willst nun eine Datei, die auf deinem Webserver liegt einbinden. Klar, da wird einfach der Pfad angegeben. Dann wird zuerst unter diesem Pfad gesucht.

Wenn kein Pfad angegeben wurde, wird neben dem include_path auch der aktuell geöffnete Ordner durchsucht.

include & include_once

include (Manual) versucht eine Datei wie oben beschrieben einzubinden.

Wenn die Datei in keinem der Pfade gefunden werden konnte, dann wird eine Warnung (WARNING) ausgegeben, der restliche PHP Code wird aber munter weiter ausgeführt.

include_once (Manual) sorgt dafür, dass eine Datei nur einmal eingebunden wird.

Bei einer Datei, die Funktionen oder eine Klasse enthält, ist es meistens nicht sinnvoll oder notwendig diese doppelt einzubinden, um zu verhindern, dass dies aus Versehen passiert, kann include_once eingesetzt werden.

Es wird dann einfach ignoriert, sollte die Datei schon eingebunden worden sein.

include "datei1.php";

include_once "datei2_insgesamt_nur_einmal_einbinden.php";

require & require_once

require (Manual) verfügt über eine ähnliche Funktionsweise wie include, allerdings mit einem entscheidenden Unterschied.

Sollte die Funktion die Datei in keinem der Pfade finden, wird ein FATAL ERROR erzeugt. Das Skript wird abgebrochen.

Das gleiche gilt für require_once. Auch hier ist der einzige Unterschied der Abbruch des gesamten Skriptes.

require 'datei1.php';

require_once 'datei2.php';

Wann du was brauchst

Stellt sich nur noch die Frage, wann was zum Einsatz kommen sollte. Das lässt sich anhand von ein paar Beispielen recht deutlich zeigen.

  • include
    Beispielsweise bei einem AdServer hilfreich. Wenn die Datei nicht gefunden wird, kann die Website trotzdem angezeigt werden. Außerdem können auch mehrmals neue Werbemittel angezeigt werden.
  • include_once
    Hilfreich, bei Dateien, die nicht unbedingt benötigt werden, aber nur einmal eingebunden werden. Dies kann zum Beispiel bei einer Footer Datei der Fall sein.
  • requirerequire_once
    Für ein require (ohne _once) fällt mir derzeit einfach kein gutes Beispiel ein. Wenn eine Datei beispielsweise die Datenbankverbindung herstellt oder prüft ob der Nutzer eingeloggt ist, dann sind diese Dateien unbedingt notwendig und sollten (da sie nur einmal benötigt werden) mit require_once eingebunden werden.

2 Gedanken zu „PHP: Unterschiede zwischen include, include_once, require und require_once“

  1. Beispiel zu require und require_once wäre beispielsweise ein Interface. Also sagen wir eine API, wenn in den Dateien wichtige Funktionen liegen und diese nicht eingebunden werden können, sollte es einen FATAL ERROR geben.