Beim mehrfach-includieren "verliere" ich variablen und funktionen

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

  • Beim mehrfach-includieren "verliere" ich variablen und funktionen

    Hi.

    Bei mir ist jetzt folgendes seltsames problem aufgetaucht.

    Ich habe ein ein script (index.php) welches via 'require' ein mainfile einbindet. in diesem mainfile sind sämtliche selbstdefinierten umgebungsvariablen, z.b. sitename, die datenbank-zugansdaten usw. drinne. desweiteren binde zu beginn dieses mainfiles sämtliche klassenbibliotheken und funktionen ein.

    ausserdem definiere ich am anfang der index.php eine konstante mit dem wert 1, dessen existenz von jedem anderem skript dass mit eingebunden wird abgefragt wird.

    so. laut php-dokumentation werden ja variablen, konstanten und funktionen an inkludierte dateien übergeben (variablen und konstanten sofern sie vorher definiert bzw. deklariert wurden).
    das funktioniert beim ersten skript das mit eingebunden wird auch ganz gut, nur ab dem zweiten oder dritten skript das eingebunden wird, funktioniert zum einen die abfrage der konstante nicht mehr und zum anderen, was viel schlimmer ist, meine funktionen, die ich ja über das mainfile mit eingebunden werden, sind dem php-parser vollkommend unbekannt und ich bekomm ständig einen fatalen fehler.

    mir raubt das noch den schlaf zumal das einbinden sonst immer geklappt hat.

    ich benutze zur zeit php5 und frag mich langsam, ob das bei dieser version normal ist.

    wenn jemand ne lösung hat oder irgendwie helfen kann bin ich dankbar.

    gruss, jazzy.

  • #2
    Könnte verschiedene Ursachen haben, gibt es Fehlermeldungen?

    Wenn ja, welche?

    Kommentar


    • #3
      Nee... fehlermeldung wäre ja schön, aber alles was ich bekomme ist, dass meine funktion nicht existiert.

      wenn ich die konstante über echo ausgebe, dann bekomm ich die namen der konstante. ganz so, als ob ich sie nie definiert habe.

      Kommentar


      • #4
        Es sieht eindeutig so aus, als ob das was du uns erzählst nicht dem entspricht, was du wirklich machst.

        Brauchen mal die entsprechenden Codeauszüge.

        haste mal in den HTML-Quelltext geguckt?

        Kommentar


        • #5
          hier erstmal ein auszug aus den drei scripten:

          auszug "index.php":
          PHP-Code:
          // konfiguration laden
          require_once("config.php");

          // variable-deklaration
          $isValid 1;
          $errorMsg = array();

          //
          // offline handeling
          //

          // ist ngina online oder offline?
          if($configIsOnline != 1)
          {
            require 
          "offline.php";
            exit;

          Die "config.php":
          PHP-Code:
          // include classes
          require 'classes/class.list.php';
          require 
          'classes/class.mysql.php';
          require 
          'classes/class.table.php';
          require 
          'classes/class.template.php';

          // include functions
          // functions.php enthält u.a. die funktion errorMsg()
          require 'includes/functions.php';

          // rest gelöscht... 
          die datei "offline.php":
          PHP-Code:
          require_once("config.php");

          // direkten zugriff abbrechen
          if($isValid != 1)
          {
            echo 
          errorMsg("Resticted Access");
            exit;

          zur erklärung:
          wenn index aufgerufen wird, dann wir zuallererst die config.php geladen. die wiederum bindet dann die klassen-bibliotheken und funktionen ein. ausserdem werden in der config.php die seiten-variable definiert.
          so ist z.b. die variable
          PHP-Code:
          $configIsOnline 
          auf "0" gesetzt wenn die Seite (z.b. wegen wartungsarbeiten) offline geschaltet ist. in diesem beispiel sei
          PHP-Code:
          $configIsOnline 
          Also wird die seite "offline.php" aufgerufen und verarbeitet.
          Damit der fehler mit der angeblichen unbekannten funktion errorMsg() nicht mehr auftritt habe ich zu beginn die zeile
          PHP-Code:
          require_once("config.php"); 
          eingefügt.
          Jetzt hab ich nur noch das problem dass die variable
          PHP-Code:
          $isValid 
          nicht erkannt wird, bzw. der ihr zugewiesene wert 1 anscheinend nicht zugewiesen ist, obwohl ich das VOR dem einbinden von offline.php genau dies tue.

          also ich bin ratlos. die php-doku hilft mir auch nicht weit. und global setzten will ich die variable nicht (hab bisher auch nicht probiert, ob das funzt).

          gruss, jazzy.

          Kommentar


          • #6
            Testausgaben? HTML-Quellcode?

            Kommentar


            • #7
              die funktion errorMsg() wird aufgerufen und das "Restricted Access" wird ausgegeben.

              wenn ich das require_once() in der offlne.php weglasse, dann bekomm ich den fehler das errorMsg() nicht existiert.

              eigendlich soll die if-abfrage ja erkennen das die variable $isValid != 1 ist (zur erinnerung $isValid wurde wurde in der index.php aus 1 gesetzt). tut sie aber nicht. sondern führt halt errorMsg() aus.

              Kommentar


              • #8
                Original geschrieben von jazzy_t
                eigendlich soll die if-abfrage ja erkennen das die variable $isValid != 1 ist (zur erinnerung $isValid wurde wurde in der index.php aus 1 gesetzt). tut sie aber nicht. sondern führt halt errorMsg() aus.
                Das führt zu der Vermutung, dass genau diese Variable in den Zeilen dazwischen verändert wird und danach nicht mher den Wert 1 hat.
                Benenne die Variable als Test an beiden Stellen mal in einen unmöglichen Namen wie $isValid_test123 um. Wenn es dann klappt, dann weißt Du was der Fehler ist.

                Kommentar


                • #9
                  Ansonsten würde ich begrüßen, wenn du mal beginnst auf mein Posting einzugehen, können deinen Thread auch beenden,

                  Kommentar


                  • #10
                    Original geschrieben von DSB
                    Das führt zu der Vermutung, dass genau diese Variable in den Zeilen dazwischen verändert wird und danach nicht mher den Wert 1 hat.
                    Benenne die Variable als Test an beiden Stellen mal in einen unmöglichen Namen wie $isValid_test123 um. Wenn es dann klappt, dann weißt Du was der Fehler ist.
                    leider auch nicht. $isValid wird einmal gesetzt und dann nur noch abgefragt. ursprünglich war das auch eine konstante (IS_VALID) und wurde über defined('IS_VALID') or die(errorMsg('')) abgefragt. weil da aber die probleme anfingen ist das zu einer variabel mutiert.

                    @TobiaZ:
                    Was willst du denn jetzt von mir?

                    Quelltext ist gepostet, html-ausgaben gabe es (ausser dem Test der an errorMsg() übergeben wurde) keine und was passieren soll und was tatsächlich passiert hab ich auch beschrieben. soll ich's dir vielleicht noch aufmalen?

                    Kommentar


                    • #11
                      OffTopic:
                      Okay, danke Tschö!

                      Kommentar


                      • #12
                        Das widerspricht meiner Logik.
                        Da muss der Hase woanders im Pfeffer liegen.
                        Kannst Du mal alle relevanten Dateien in ein Zip packen und zum Download anbieten?

                        Kommentar

                        Lädt...
                        X