include_once geht nicht (immer)

Ironmouse

Grünschnabel
Weiss jemand was es hier auf sich hat?

Ich habe einen Ordner mit PHP-Includes - also z.B:

  • var.inc.php
  • database.inc.php
  • ...

database.inc.php included unter anderem var.inc.php:
PHP:
require_once("var.inc.php");

Da sie im gleichen Verzeichnis liegen geht das ohne Probleme.

Jetzt wollte ich ein wenig Ordnung machen und das database.inc.php in ein Unterverzeichnis "data" versorgen.

Code:
 ????>include
   ??>var.inc.php
   ???>data
    ??>database.inc.php


Da database.inc.php weiterhin auch die include Datei var.inc.php includen soll habe ich das require_once umgeschrieben:
PHP:
require_once("../var.inc.php");

Aber das geht nicht.

Wieso? Ich springe mit ../ doch ein Verzeichnis höher... (?)

:confused:
 
Huhu,

includieren geht immer von dem Script aus, von dem der erste Include aufgerufen wurde.

Das heißt, wenn du z.B. eine index.php hast, Unterordner und UnterUnterordner, und du includierst in der index.php eine Datei im Unterordner, wird dieser Code praktisch in deine index.php kopiert, was wiederum bedeutet, dass du für den include in dem include wieder vom Pfad der index.php ausgehen musst ( kompliziert :| ).

Falls ich falsch liege, bitte korrigiert mich.

Du müsstest also in der database.inc.php den Code haben:

PHP:
require_once("include/var.inc.php");

Lg pHyro
 
Alles bestens - Vielen Dank! (Das muss einem erstmals erklärt werden :rolleyes:)

Es hat nun so geklappt:
PHP:
require_once("./include/var.inc.php");

PHP ist einfach gesagt ein grosses Gebastel; Wenn ich nun das Include File von einer anderen Verzeichnissebene öffne, würde es demnach nicht mehr richtig funktionieren. Das geht irgendwie gegen die Logik, die Includes sollten ja nicht über die das aufrufende File wissen...


Danke nochmals für die Hilfe
 
Absolute Pfadangaben? :rolleyes:

[phpf]realpath[/phpf] zB ist ein super Werkzeug, genauso wie global gültige Konstanten oder Variablen, die zB einen Ausgangspfad beinhalten - Ich arbeite unter anderem mit verschiedenen Pfadangaben, die ich immer wieder gebrauche beim Zugriff, so ergibt zB (frei erfunden)
PHP:
define( "PATH_SOURCE", realpath( dirname( __FILE__ ) ) . '/' );
// Anwendung zB: require_once( PATH_SOURCE . "myclass.php" );
eine Konstante, die den absoluten Pfad zum Ordner der Datei, in der sich der Interpreter an dieser Stelle befindet, zurück. Diese kann man dann einfach wie im Beispiel oder auf andere Weise verwenden.

Relative Pfadangaben werden immer wieder evaluiert, wohingegen PHP seit 4.1 absolute Pfadangaben für den Lauf speichert und so nicht immer wieder schauen muss, ob der Pfad existiert. Das bringt neben der Sicherheit, dass man mit einem korrekten Pfad arbeitet auch noch Performancegewinne.

Übringens bedient sich auch jede andere Sprache, die Zugriffe auf das Filesystem gestattet, der (korrekten) Evaluierung von relativen und absoluten Pfadangaben, von dieser Seite aus kann ich deine Behauptung, PHP sei ein Gebastel, nicht unterstützen.
 
Die realpath()-Funktion müsste in diesem Beispiel gar nicht eingesetzt werden, da die magische Konstante __FILE__ bereits den absoluten Pfad ohne Links zur aktuellen Datei enthält.
 

Neue Beiträge

Zurück