Richi: In zu inkludierender Datei prüfen, welche Datei inkludieren will

Hi,

kann man in der Datei inkludiere.php abfragen, welche Datei sie inkludieren will?

Gruß, Richi

  1. Hi!

    kann man in der Datei inkludiere.php abfragen, welche Datei sie inkludieren will?

    Nein, nur welche sie inkludiert hat. debug_backtrace() liefert den Aufruf-Stack, der auch die Inkludierungen enthält.

    Lo!

    1. Hi dedlfix!

      kann man in der Datei inkludiere.php abfragen, welche Datei sie inkludieren will?
      Nein, nur welche sie inkludiert hat. debug_backtrace() liefert den Aufruf-Stack, der auch die Inkludierungen enthält.

      Man kann aber schauen, ob eine bestimmte Konstante in der aufrufenden Datei gesetzt wurde und somit überprüfen, ob das Einbinden rechtens ist.

      MfG H☼psel

      --
      "Es gibt Augenblicke, in denen eine Rose wichtiger ist als ein Stück Brot."
      Rainer Maria Rilke
      Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
      1. Hi!

        kann man in der Datei inkludiere.php abfragen, welche Datei sie inkludieren will?
        Nein, nur welche sie inkludiert hat. debug_backtrace() liefert den Aufruf-Stack, der auch die Inkludierungen enthält.
        Man kann aber schauen, ob eine bestimmte Konstante in der aufrufenden Datei gesetzt wurde und somit überprüfen, ob das Einbinden rechtens ist.

        Bedingt. Wenn man das gesamte Script inklusive dem/den aufrufenden abbrechen will, kann man exit/die() verwenden. Wenn man nur die Inkludierung verhindern will, aber das Script weiterlaufen soll, kann zwar die inkludierte Datei mit return eine weitere Abarbeitung verlassen, aber die darin enthaltenen Funktionen und Klassen haben dann bereits den Weg in den globalen Funktions- und Klassenspeicher gefunden. Denn der Code wird zuerst übersetzt und dann wird er ausgeführt.

        Lo!

        1. Hi,

          Man kann aber schauen, ob eine bestimmte Konstante in der aufrufenden Datei gesetzt wurde und somit überprüfen, ob das Einbinden rechtens ist.

          Bedingt. Wenn man das gesamte Script inklusive dem/den aufrufenden abbrechen will, kann man exit/die() verwenden. Wenn man nur die Inkludierung verhindern will, aber das Script weiterlaufen soll, kann zwar die inkludierte Datei mit return eine weitere Abarbeitung verlassen, aber die darin enthaltenen Funktionen und Klassen haben dann bereits den Weg in den globalen Funktions- und Klassenspeicher gefunden. Denn der Code wird zuerst übersetzt und dann wird er ausgeführt.

          eval is your f[r]iend :-)

          Ob es überhaupt darum geht - zu prüfen, ob die Einbindung „rechtens“ ist - wissen wir aber noch gar nicht.
          Vielleicht will Richi ja auch nur innerhalb seines eigenen Systems auswerten, „von wo“ eine Datei eingebunden wird, um darauf unterschiedlich reagieren zu können. Was genau er erreichen will, möge er uns also bitte erst mal genauer erklären.

          MfG ChrisB

          --
          RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
  2. Moin!

    Schau Dir das  Folgende an (starte caller.php) und ziehe Deine Schlüsse:

    <?php

    caller.php

    $lnbr="  <br />\n";

    print "caller.php:$lnbr";
    print "__FILE__: " . __FILE__ . $lnbr;
    print "$_SERVER['SCRIPT_FILENAME']: ' . $_SERVER['SCRIPT_FILENAME'] . $lnbr;
    include 'inc.php';
    ?>

    <?php

    inc.php

    $lnbr="  <br />\n";

    print "inc.php:$lnbr";
    print "__FILE__: " . __FILE__ . $lnbr;
    print "$_SERVER['SCRIPT_FILENAME']: ' . $_SERVER['SCRIPT_FILENAME'] . $lnbr;
    ?>

    Du kannst im übrigen nur prüfen, welche Datei includiert _hat_.

    Bei tieferen Strukturen (include ruft include) geht das natürlich nicht so einfach. Wende dann den Tipp mit der selbst definierten Konstante (s. Hopsel) oder debug_backtrace (s. Dedlfix) an.

    Über "Magische Konstanten": http://php.net/manual/de/language.constants.predefined.php

    MFFG (Mit freundlich- friedfertigem Grinsen)

    fastix

    1. Moin!

      print "$_SERVER['SCRIPT_FILENAME']: ' . $_SERVER['SCRIPT_FILENAME'] . $lnbr;

      ... muss natürlich in beiden Versionen

      print "$_SERVER['SCRIPT_FILENAME']: " . $_SERVER['SCRIPT_FILENAME'] . $lnbr;

      lauten.

      MFFG (Mit freundlich- friedfertigem Grinsen)

      fastix