Linuchs: php include - welches Programm includiert?

Moin,

per include füge ich function ein.

Nun möchte ich wissen, von welcher Datei diese function aufgerufen wird.

echo __FILE__ gibt den Namen der include-Datei selbst.

Ich kann den Namen der rufenden Datei als Parameter mitgeben, aber vermutlich kennt php ihn schon. Wie komme ich dran?

fragt Linuchs

  1. Hallo Linuchs,

    ich hab das mal für Dich gegoogelt.

    Erste gefundene Antwort ist: Lass das. Warum sollte man - außer zu Debug-Zwecken - wissen wollen, von wo eine Datei inkludiert wird? Wenn Du meinst, dieses Wissen zu benötigen, hast Du einen Designfehler.

    Zweite gefundene Antwort ist: debug_backtrace()

    Zum Design: Es gibt die PHP Standard Recommentation PSR-1, in der steht:

    2.3. Side Effects

    A file SHOULD declare new symbols (classes, functions, constants, etc.) and cause no other side effects, or it SHOULD execute logic with side effects, but SHOULD NOT do both.

    Das heißt: Für eine Include-Datei bietet sich an, dass sie keine Seiteneffekte hat und lediglich Klassen und Funktionen deklariert. Die Funktionen bzw. die in den Klassen vorhandenen Methoden dürfen bei Aufruf natürlich Seiteneffekte haben (sprich: I/O machen oder ähnlich).

    Und das heißt: alle Kontextinformationen, die für die Includes relevant sind, übergibst Du beim Aufruf der von dort geholten Klassen und Methoden. Dass die Include-Datei sich aktiv über ihr Umfeld "informiert", ist unerwünscht.

    Rolf

    --
    sumpsi - posui - obstruxi
    1. Zweite gefundene Antwort ist: debug_backtrace()

      Vielleicht braucht er das ja nur für Debugging-Zwecke oder er will die Daten loggen?

    2. Hallo Rolf,

      ich hab das mal für Dich gegoogelt.

      danke, ich habe die Suchbegriffe nicht gewusst. Überhaupt ist die Suche nach Fach-Informationen oft unerfreulich, weil viele uralte Diskussionen gefunden werden.

      Da weiß man nicht - ist das noch aktuell?

      So funktioniert es:

      include_once("getRowProgramm_function.php");
      $row_zielprogramm = getRowProgramm( "p000", __FILE__ );
      

      Gruß, Linuchs

      1. So funktioniert es:

        include_once("getRowProgramm_function.php");
        $row_zielprogramm = getRowProgramm( "p000", __FILE__ );
        

        Naja. Gerade so.

        require_once("getRowProgramm_function.php");
        $row_zielprogramm = getRowProgramm( "p000", __FILE__ );
        

        wäre etwas besser, weil Du dann nicht staunst, dass die function „getRowProgramm“ nicht existieren solle, sondern aus der Fehlermeldung erfährst, dass die Datei nicht geladen werden konnte.

        Die Fortsetzung des Programmes ist dann ja wohl auch sinnlos…

        Willst Du etwas über die Vorteile des „Verkapselns“ von Funktionen in Klassen und dieser Klassen in Namensräumen und das automatische Laden derselben erfahren?

        1. Hallo,

          Willst Du etwas über die Vorteile des „Verkapselns“ von Funktionen in Klassen und dieser Klassen in Namensräumen und das automatische Laden derselben erfahren?

          Vielleicht ... es muss mit den bisher 50 Programmen kompatibel sein.

          Jedes PHP-Programm beginnt mit index.php. Dort werden die Parameter ausgewertet und das zuständige Programm mit include nachgeladen. Bisher überprüfen die nachgeladenen Programme selbst, ob sie

          • öffentlich oder
          • für Mitglieder oder
          • für Administratoren

          sind. Und jedes hat seine individuellen Fehlermeldungen und Lücken. Durch Suchmaschinen fiel mir auf, dass die Öffentlichkeit Seiten zu sehen bekommt, die nicht öffentlich sein sollten. Keine personenbezogene Daten, aber Informationen, die womöglich zu Abmahnungen oder GEMA-Forderungen führen können.

          Nun habe ich endlich ein lange aufgeschobenes Konzept angefangen, nämlich die erforderlichen Programmrechte in einer DB-Tabelle zu speichern und zentral zu entscheiden, ob das Programm nachgeladen wird. Als „Abfallprodukt“ könnte hier pro Programm auch eine To-Do-Liste geführt werden, die sonst im Wust der Mails untergeht.

          Als Eremit und Freiberufler (inzwischen Hobbybastler in Rente) fehlt mir seit 2001 der Austausch mit Kollegen. Das freie Gespräch mit Anregungen, Bewertung von Konzepten usw. Die Suche nach Fragen / Antworten zu Details in irgend welchen Foren hilft im Moment zwar weiter, aber ersetzt eben nicht das Face-to-Face mit Kollegen.

          Womöglich habe ich in 20 Jahren Internet-Programmierung ganz tolle Lösungen entwickelt, womöglich das Rad neu erfunden statt ein fertiges CMS zu verwenden, womöglich mit viel Zeitaufwand in dutzende Sackgassen gelaufen und in einigen stecken geblieben.

          Willst Du etwas über die Vorteile des „Verkapselns“ von Funktionen in Klassen und dieser Klassen in Namensräumen und das automatische Laden derselben erfahren?

          Ja, ein Wochenend-Seminar wäre genau das Richtige. Kannst du was empfehlen?

          Lieben Gruß, Linuchs

          1. Ja, ein Wochenend-Seminar wäre genau das Richtige. Kannst du was empfehlen?

            Ich habe sowieso vor, dazu ein schlankes Handout zu „schnitzen“. Das schmeiss ich dann zu Dir zu rüber.

            1. Das schmeiss ich dann zu Dir zu rüber.

              Liest sich gut, bin gespannt.