Tom1tk: Korrekte Angabe eines Pfades zur Datei

Hallo zusammen.

In meinem php-Projekt habe ich verschiedene Dateien in verschiedenen Ordnern:

Ordner a:
Datei a_1.php
Datei a_2.php

Ordner b:
Datei b_scripte.php
Datei b_daten.php

Die Datei a_1.php:
<?php
include "a_2.php";
?>

Die Datei a_2.php

<?php
include "../b/b_scripte.php";
include "../b/b_daten.php";
?>

In der b_scripte.php wird die Datei b_daten.php geschrieben, bzw. etwas angefügt. Wie muss ich jetzt in der Datei b_scripte.php die Datei öffnen???? Mit ner Referenz von der oberseten "include-Ebene" (also "../b/b_daten.php" aus, oder mit der Pfadangabe "./b_daten.php"??

Nochmal: In der Scripte Datei befinden sich alle Funktionen, die die Eingaben aus a_2.php verarbeiten und in die Datei b_daten.php reinschreiben. Und wie muss ich jetzt korrekterweise referenzieren? Ich hab das mit beiden Schreibweisen getestet und komischerweise gehen beide?????? Ich blicks nicht mehr.

Meiner Meinung nach muss ich doch immer von der jeweiligen ausführenden Datei (aslo b_scripte.php) die Referenz nach b_daten.php schreiben und nicht von a_1.php nach b_daten.php.

Schwierig auszudrpcken, aber ich hoffe Ihr wisst was ich meine.

Danke für Eure Hilfe.

Tom1tk

  1. Hi!

    Ich glaube du meinst folgendes:

    1. Willst du von einer PHP-Datei eine andere mittels include öffnen, die sich IM SELBEN Ordner befindet, musst du "./dateiname.php" anwenden ("./" steht für den gleichen Ordner)

    2. Willst du von einer Datei aus eine andere IN EINEM ANDEREN Ordner includen, so musst du "../ordnername/dateiname.php" anwenden. ("../" steht für den Ordner, der höher liegt)

    Ich hoffe jetzt klappts!

    cu

    Marc Reichelt || http://www.marcreichelt.de/

    --
    Linux is like a wigwam - no windows, no gates and an Apache inside!!!
    SELFCode: ss:| zu:) ls:[ fo:} de:[ va:} ch:? sh:) n4:° rl:? br:^ js:( ie:% fl:) mo:)
    http://emmanuel.dammerer.at/selfcode.html
    1. Danke schön.

      Das wars aber noch nicht ganz: Diese Referenzierung ist mir klar.

      Ein Beispiel:

      Datei im Ordner ROOT/A/B_1/a.php:

      <?php include "../../B_2/xy/zy/ordner/super.php"; ?>

      Diese Datei includet wiederum:

      <?php include "../../../../../../meine_functionen_im_root.php"; ?>

      So: wenn die Datei a.php jetzt ausgeführt wird, dann wird doch die Datei super.php mit includet, und was passiert jetzt mit den meine_funktionen_im_root.php? Wird dieser "Befehl" erst in der Datei a.php ausgeführt, oder schon in der super.php?

      Schwierig, schwierig....
      Greets Tom1tk

      1. Hi!

        Soweit ich weiß müsste der "Ausführungspfad" aller Dateien dann deiner "a.php" entsprechen.
        Ich habe das Problem glaube ich schon mal selbst gehabt und einen Workaround versucht.

        cu

        Marc Reichelt || http://www.marcreichelt.de/

        --
        Linux is like a wigwam - no windows, no gates and an Apache inside!!!
        SELFCode: ss:| zu:) ls:[ fo:} de:[ va:} ch:? sh:) n4:° rl:? br:^ js:( ie:% fl:) mo:)
        http://emmanuel.dammerer.at/selfcode.html
        1. Tach auch,

          genau das meinte ich, hab aber nirgens eine echte Beschreibung / Hilfe gefunden.

          Greets

          1. Hello,

            abgearbeitet wird immer mit dem aktuellen Verzeichnis, in dem das Script steht, es sei denn, dass Du die Dateien über http:// includest. dann wird natürlich dort abgearbeit, wo jene Dateien liegen...

            Das bedeutet, dass die Pfade immer relativ zum Scriptverzeichnis gesetzt werden müssen. Man kann allerdings auch das Verzeichnis wechseln:
            http://de3.php.net/manual/de/function.chdir.php

            Allerdings sollte man sich vorher ggf. das aktuelle Verzeichnis merken:
            http://de3.php.net/manual/de/function.getcwd.php

            Liebe Grüße aus http://www.braunschweig.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            1. Oh jeah.

              Das wars. Thanx nach Braunschweig.

              Grüßle Tom1tk

              1. Hi,

                ...weil ich das Problem selber gerade hatte. Leichte ist es, finde ich, wenn du beim 'includen' wie folgt vorgehst:

                $dir = $_SERVER['DOCUMENT_ROOT'];
                $require($dir."deine_datei.php");

                das ist wesentlich übersichtlicher und du musst immer nur den absoluten Pfad zu deinen Dateien angeben, egal von wo du sie aufrufst.

                Grüße, Andre

                1. Hello,

                  ...weil ich das Problem selber gerade hatte. Leichte ist es, finde ich, wenn du beim 'includen' wie folgt vorgehst:

                  $dir = $_SERVER['DOCUMENT_ROOT'];
                  $require($dir."deine_datei.php");

                  das ist wesentlich übersichtlicher und du musst immer nur den absoluten Pfad zu deinen Dateien angeben, egal von wo du sie aufrufst.

                  Nun sollten gerade include-Dateien oft nicht innerhalb der Document Root liegen.

                  Liebe Grüße aus http://www.braunschweig.de

                  Tom

                  --
                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                  1. Guten Morgen,

                    nun ja, das mit den inclkude-Dateien ausserhalb des Roots ist sinnvoll. Deshalb nochmals meine Frage, jetzt mit Beispiel:

                    Datei ROOT/A/B/a.php:
                    <?php
                    include "../../A_1/B/C/D/b.php";
                    ?>

                    Datei ROOT/A_1/B/C/D/b.php:
                    <?php
                    print $_SERVER["REDIRECT_SCRIPT_URI"];
                    ?>

                    So: Was wird jetzt korrekterweise beim Aufruf von a.php ausgegeben:

                    "http://www.domain.de/A/B/a.php"

                    oder

                    "http://www.domain.de/A_1/B/C/D/b.php"

                    Das ist die große Frage aller Fragen!  Klar kann ich das ausprobieren, aber vielleicht hat jemand irgendwo ne Befehlsreferenz, wo das genau beschrieben steht, wie man das korrekt macht.

                    Danke
                    Tom1tk

                  2. Hi, Tom

                    Nun sollten gerade include-Dateien oft nicht innerhalb der Document Root liegen.

                    Da hast du mir jetzt einen entscheidenden Hinweis gegeben. Danke. Ich schätze da werde ich jetzt was ändern müssen :)

                    Grüße, Andre

                    1. Hello,

                      Nun sollten gerade include-Dateien oft nicht innerhalb der Document Root liegen.

                      Da hast du mir jetzt einen entscheidenden Hinweis gegeben. Danke. Ich schätze da werde ich jetzt was ändern müssen :)

                      Na, und das ist auch ganz einfach, weil PHP ja den [include_path] grundsätzlich verwendet, wenn die gesuchte Datei nicht im aktuellen  Verzeichnis steht.

                      Wenn man seine Dateien unter dem include_path ablegt, dann braucht man auch nur

                      include("datei.inc.php")

                      zu schreiben.

                      http://de3.php.net/manual/de/function.set-include-path.php
                      http://de3.php.net/manual/de/function.get-include-path.php

                      Liebe Grüße aus http://www.braunschweig.de

                      Tom

                      --
                      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen