Variablendefinition in include Dateien

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Variablendefinition in include Dateien

    Hi,

    ich verzweifle an folgendem Problem mit der include-Funktion in PHP:

    Ich füge in einer Datei "top.php" zwei andere Dateien "A.php" und "B.php" mit der include-Funktion ein. Zwischen beiden Include-Anweisungen stehen ein paar Zeilen Code, die aber mit meinem Problem nichts zu tun haben (dürften). Wenn ich nun in A.php Variablen definiere, sind diese in B.php plötzlich nicht mehr vorhanden.

    In top.php sind die Variablen sehr wohl vorhanden. Außerdem werden A.php und B.php richtig includet, da ich den Code sehe, der von beiden produziert wird. Nur die in A.php definierten Variablen existieren in B.php nicht mehr.

    Ich definiere die Variablen in A.php auch nicht in einer Funktion oder so, oder versuche in B.php innerhalb einer Funktion darauf zuzugreifen. Der Vollständigkeit halber: A.php und B.php sind in meinem Stammverzeichnis gespeichert, top.php in einem Unterverzeichnis. Ich arbeite mit absoluten Pfaden, die in Variablen gespeichert sind, um Dateien zu includen. Wie erwähnt, das includen an sich ist aber nicht das Problem.

    Ich arbeite mit php 4.4.1, wer sich phpinfo anschauen will, kann das gerne unter http://www.sciborg.uwaterloo.ca/~bwjungni/phpinfo.php tun.

    Vielen Dank für eure Antworten,

    Bastian
    Zuletzt geändert von Caesar; 13.11.2005, 17:45.

  • #2
    Schon versucht per Superglobale daruaf zuzugreifen?

    B.php
    PHP-Code:
    $GLOBALS["variable"
    oder

    PHP-Code:
    GLOBAL $var
    54 68 65 72 65 20 61 72 65 20 6F 6E 6C 79 20 31 30 20 74 79 70 65 73 20 6F 66 20 70 65 6F 70 6C 65 20 69 6E 20 74 68 65 20 77 6F 72 6C 64 3A A 54 68 6F 73 65 20 77 68 6F 20 75 6E 64 65 72 73 74 61 6E 64 20 62 69 6E 61 72 79 2C 20 61 6E 64 20 74 68 6F 73 65 20 77 68 6F 20 64 6F 6E 27 74

    Kommentar


    • #3
      Superglobals

      Ich habe sowohl versucht, die Variablen in A.php explizit als Global zu definieren, als auch mir in B.php den $GLOBALS-Array per print_r (direkt in der ersten Zeile von B.php) angeschaut. Es werden aber keine von mir selbst definierten Variablen angezeigt.

      Kommentar


      • #4
        Füge mal bitte ein "print_r(get_defined_vars());" in die top.php. Natürlich nach dem Includen der beiden anderen Dateien.

        Findest du deine Variablen darin wieder?
        Falls nicht, kannst du die Zeile ja auch mal direkt nach den einzelnen Include-Anweisungen einfügen ... wenn dann immernoch nichts findest, hätte ich gern mal den Code von top, A und B. Kann nämlich eigentlich gar nicht sein, was du hier erzählst.

        Kommentar


        • #5
          get_defined_vars()

          Hab ich gemacht. Direkt vor dem includen in top.php existieren die Variablen noch, am Anfang von B.php nicht mehr, direkt nach dem includen in top.php sind sie wieder da.

          Ich arbeite erst seit kurzem mit PHP, dennoch erscheint mir dieses Verhalten extrem rätselhaft.

          Die Dateien top.php heißt eigentlich Index.php und liegt in http://www.sciborg.uwaterloo.ca/~bwj...mepage/Kanada/
          A.php heißt prepend.php und ist in http://www.sciborg.uwaterloo.ca/~bwjungni/Homepage/
          B.php heißt Menu.php und ist ebenfalls in http://www.sciborg.uwaterloo.ca/~bwjungni/Homepage/

          Meine definierten Variablen heißen z.B. $ROOTDIR, $globals() und $menu(), wobei die beiden letzteren ein Array sind. $menu erzeugt auch die Warnung, da ich in B.php bzw. Menu.php diesen Array mit foreach durchlaufen wollte.

          Ich habe alle drei Dateien auch mal als txt-Datei in die gleichen Verzeichnisse geladen. Mag sein, dass mein Code umständlich und ziemlich unschön ist, aber der vom Browser angezeigte Quelltext von Index.php ist ganz übersichtlich.

          Nebenbei, in anderen includeten Dateien - z.B. MenuPics.php - scheint's auch nicht zu funktionieren.

          Der Code an sich funktionert, wie er das sollte. Neben Index.php existiert Index2.php, in der ich allen includeten Code einfach per Hand reinkopiert habe, die einwandfrei funktioniert (bis auf die Links, die alle auf die problematische Index.php verweisen).
          Zuletzt geändert von Caesar; 11.11.2005, 00:36.

          Kommentar


          • #6
            Re: get_defined_vars()

            Original geschrieben von Caesar
            Meine definierten Variablen heißen z.B. $ROOTDIR, $globals() und $menu(),
            Ganz schlechter Stiil, ein Array $globals anzulegen ... wegen
            http://www.php.net/manual/en/reserve...iables.globals
            Zuletzt geändert von onemorenerd; 11.11.2005, 00:56.

            Kommentar


            • #7
              Hm... stimmt. Obwohl die unglückliche Namensgebung wohl nicht mein Problem ist. Um sicher zu gehen, habe ich $globals mal in $globvars umbenannt, ich habe aber immer noch das gleiche Problem.

              Außerdem habe ich mein Skript mal auf einem anderen Server ausprobiert, habe dort aber genau das gleiche Problem. Ich glaube sowieso nicht, dass es an irgendwelchen Serverkonfigurationen liegt - oder könnte das doch der Fall sein ? Sollte ich vielleicht mal PHP.ini irgendwie ändern ? (Dummerweise weiß ich nicht, wie ich ans Original herankomme.)

              So langsam bin ich am verzweifeln. Ohne include-Befehl zu arbeiten ist auch keine echte Alternative.

              Kommentar


              • #8
                PHP-Code:
                <?php // index.php
                include "prepend.php";
                echo 
                __FILE__.': '.$ROOTDIR.'<br>';
                include 
                "menu.php";
                echo 
                __FILE__.': '.$ROOTDIR.'<br>';
                ?>
                PHP-Code:
                <?php // prepend.php
                $ROOTDIR "http://www.sciborg.uwaterloo.ca/~bwjungni/Homepage/";
                $ROOTDIR "http://www.rzuser.uni-heidelberg.de/~bjungnit/PHP/";
                echo 
                __FILE__.': '.$ROOTDIR.'<br>';
                ?>
                PHP-Code:
                <?php // menu.php
                echo __FILE__.': '.$ROOTDIR.'<br>';
                ?>
                Ausgabe bei mir:
                xxx\prepend.php: http://www.rzuser.uni-heidelberg.de/~bjungnit/PHP/
                xxx\index.php: http://www.rzuser.uni-heidelberg.de/~bjungnit/PHP/
                xxx\menu.php: http://www.rzuser.uni-heidelberg.de/~bjungnit/PHP/
                xxx\index.php: http://www.rzuser.uni-heidelberg.de/~bjungnit/PHP/

                Wenn dir also irgendwelche Variablen verloren gehen, dann liegt es nicht an PHP sondern eher an deinen unzähligen unset() oder der Art wie du deinen Code gestrickt hast!

                Kommentar


                • #9
                  <?php // prepend.php
                  $ROOTDIR = "http://www.sciborg.uwaterloo.ca/~bwjungni/Homepage/";
                  $ROOTDIR = "http://www.rzuser.uni-heidelberg.de/~bjungnit/PHP/";
                  ?>
                  Uups.. das war natürlich Schwachsinn, ich hatte $ROOTDIR nur einen neuen Wert gegeben, als ich die Datei auf einem anderen Server getestet habe, hab dann aber vergessen, sie wieder heraus zu löschen, als ich sie auf den ersteren Server sciborg.uwaterloo.ca hochgeladen habe. Hatte diese Zweifach-Zuweisung die ganze Zeit nicht in meinem Skript, d.h. sie hat meine Probleme nicht verursacht.

                  Im Übrigen arbeite ich jetzt mit relativen Pfaden, zumindest beim Includen - obwohl ich dachte, absolute seien sicherer. Jetzt funktioniert's.
                  Zuletzt geändert von Caesar; 14.11.2005, 04:50.

                  Kommentar

                  Lädt...
                  X