Require, include und PHP


PHP Elephant
Attribution-NonCommercial-NoDerivs License by Laughing Squid

Ich bin noch immer am Skripten. Diesmal ein Problem, dass sich mir öfter in PHP in den Weg stellt: Dateien inkludieren. Irgendwann habe ich beschlossen nur noch require_once() zu verwenden, da Mehrfachinkludierung hier ausgeschlossen ist. Problematisch wird es, Wenn man eine Datei einbindet, die wiederrum selbst etwas einbindet. Wenn ich größere Sachen schreibe, Habe ich eine Datei, in der es nur requires gibt um mir Redundanzen in der Schreibareit zu sparen. Wenn ich diese Datei jedoch aus verschiedenen Verzeichnissen einbinde, kann es schon mal zu Fehlern kommen, wenn die Pfadangaben relativ gemacht werden. Das Problem schaff man recht bequem mit diesen 4 Zeilen aus der Welt:

$d =   dir(dirname(__FILE__));
chdir($d->path);
chdir ('../');
$basedir= getcwd();

require_once("$basedir/settings.php");
require_once("$basedir/elementar/CSettings.php");
require_once("$basedir/additional/CFormHandler.php") ;
require_once("$basedir/core/CRegister_Hooks.php");

Die Funktion dirname() gibt den absoluten Pfad der Konstante __FILE__ zurück – in diesem Fall den der Datei requirerequire.php (der Name ist nicht nur aussagekräftig sondern auch cool). Da die Datei in /core liegt, wechsle ich ins Basisverzeichniss und muß nur noch daran denken, die absoluten Angaben zu machen. Wenn jemand einen eleganteren Trick kennt, soll er ihn mir bitt mitteilen.:)

Advertisements
Dieser Beitrag wurde unter Allgemein abgelegt und mit , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Eine Antwort zu Require, include und PHP

  1. foobar schreibt:

    Also ich hätte da einen eventuell eleganteren Trick:
    über den Include-Path ( http://de3.php.net/manual/de/ini.core.php#ini.include-path )
    Damit könnte der Code so aussehen:


    $path = dirname(dirname(__FILE__)); # './../'
    set_include_path(get_include_path() . PATH_SEPARATOR . $path);

    require_once("settings.php");
    require_once("elementar/CSettings.php");
    require_once("additional/CFormHandler.php") ;
    require_once("core/CRegister_Hooks.php");

    Damit spart man sich das Hin- und Herwechseln des aktuellen Verzeichnis und kann außerdem dieselben require_once()-Anweisungen in anderen Dateien verwenden

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s