kostenloser Webspace werbefrei: lima-city


[PHP] Frage zum relativen Pfad beim Includen.

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    sincer

    Kostenloser Webspace von sincer

    sincer hat kostenlosen Webspace.

    Hey ;)

    Ich habe eine Frage zu relativen Pfaden wenn man in PHP include, require, etc. verwendet.

    Ich habe eine Verzeichnisstruktur, die in etwa so aussieht:
    FILE datei.php
    
    DIR config
    - FILE config.php
    
    DIR class
    - FILE class.php
    - FILE class2.php

    Also im Hauptverzeichnis befindet sich eine Datei und zwei Unterverzeichnisse. In jedem Unterverzeichnis befinden sich weitere Dateien.

    Nun will ich in datei.php meine Klasse verwenden, und muss in dieser also class.php einbinden.
    require('./class/class.php');

    Die Klasse selbst benötigt etwas aus der config.php. Um diese einzubinden, muss ich in class.php nun folgendes schreiben:
    require('./config/config.php');


    Das funktioniert, kommt mir aber eigenartig vor. Ich include beide male mit "./" , da alles von der datei.php ausgeht.
    Ich hätte aber erwartet, dass ich in class.php die config.php mit "../" einbinden muss, da ich ja erst ein Verzeichnis hoch gehen muss, um dann in config zu landen.

    Soweit funktioniert der Code allerdings.

    Nur wenn ich nun aus class2.php die class.php benötige, funktioniert das nicht mehr, denn aus dem Unterverzeichnis stimmt der relative Pfad "./config.php" ja nicht mehr.

    Ich hoffe, ich konnte das Problem halbwegs deutlich darstellen.

    Meine Frage lautet nun:
    Geht so etwas überhaupt mit relativen Pfaden?
    Oder muss ich mit absoluten Pfaden arbeiten?

    lg
    Sincer

    Beitrag zuletzt geändert: 25.7.2011 13:45:41 von sincer
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Der Pfad des Dokuments bleibt gleich, unabhängig davon, in welcher Datei der Code steht. Dementsprechend ist immer von der Datei aus zu gehen, die von User aufgerufen wurde.
  4. Autor dieses Themas

    sincer

    Kostenloser Webspace von sincer

    sincer hat kostenlosen Webspace.

    Hey ;)

    Ja danke, genau diesen Effekt habe ich gerade bemerkt.
    Aber ich sehe, dass ich mein Problem (den Fall mit class2.php) schlecht beschrieben habe...

    Ist jetzt ein blödes Beispiel von der Namensgebung, aber egal:
    Wenn sich jetzt in dem Verzeichnis "class" eine "user.php" befindet, die vom User direkt aufgerufen wird.
    "user.php" benötigt ebenfalls "class.php", die wiederum "config.php" benötigt.
    Nun stimmt der relative Pfad zur config.php nicht mehr, wenn man user.php aufruft.

    *Knoten in der Zunge hab* ^^

    Jetzt sollte die Problembeschreibung stimmen. Verstehst du, was ich meine?
    Nun muss ich ja mit absoluten Pfaden arbeiten, oder gibt es eine alternative?

    lg
    Sincer
  5. Nimm $_SERVER['SCRIPT_FILENAME'] und hacke den Dateinamen ab, also einfach
    $var = explode('/', $_SERVER['SCRIPT_FILENAME'], -1);
    $path = '';
    foreach($var as $nextPart)
    {
        $path .= $nextPart.'/';
    }
    echo $path;


    Beitrag zuletzt geändert: 25.7.2011 16:21:19 von drafed-map
  6. Autor dieses Themas

    sincer

    Kostenloser Webspace von sincer

    sincer hat kostenlosen Webspace.

    Hey ;)

    // EDIT: Gelöst -> Ganz unten :)

    drafed-map schrieb:
    Nimm $_SERVER['SCRIPT_FILENAME'] und hacke den Dateinamen ab

    Danke für deine Mühe, aber das funktioniert leider nicht :(

    Wenn ich deinen Code in meine Klasse gebe, und den Pfad ausgeben lasse, denkt die Klasse, dass ihr Dateiname die aufrufende Datei wäre.

    Um im Gegebenen Beispiel zu bleiben:
    Ich gebe deinen Code in class.php (mit dem echo), und rufe im Browser datei.php auf (die class.php einbindet). Nun gibt mit das Echo (aus class.php) den Dateinamen von datei.php aus. (Also sofern ich das Limit bei explode() von -1 auf 0 setze.)

    Gibt es da noch eine andere Möglichkeit, das absolut, aber dynamisch zu gestalten?

    Danke auf jeden Fall :)
    Sincer

    // EDIT:
    Hab's schon :)
    Es geht mit __FILE__
    $parts = explode('/', __FILE__, $limit);

    Vielen Dank drafed-map :)

    Beitrag zuletzt geändert: 25.7.2011 18:37:34 von sincer
  7. Ohne die Zwei Punkte (./), denn die datei.php befindet sich ja im selben Verzeichnis wie die anderen Verzeichnisse
  8. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!