Roni: include zurückverfolgen

Hallo zusammen,
gibt es eine Möglichkeit aus einer Inkludierten Datei heraus, herauszufinden von welcher sie inkludiert wurde?
z.B.

Datei: Papa.php:

include(Sohn.php)

Datei Sohn.php:
<? echo ...
Code usw...?>

Hat die Datei Sohn.php die Möglichkeit herauszufinden das sie von Papa.php inkludiert wurde?

  1. hi,

    gibt es eine Möglichkeit aus einer Inkludierten Datei heraus, herauszufinden von welcher sie inkludiert wurde?
    [...]
    Hat die Datei Sohn.php die Möglichkeit herauszufinden das sie von Papa.php inkludiert wurde?

    print_r($_SERVER);

    gruß,
    wahsaga

    --
    "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
    1. Ich verstehe nicht ganz!

      print_r($_SERVER);

      print_r($_SERVER); gibt quasi alle "Umgebungsvariablen" aus oder?

      Mit echo $_SERVER["PATH_NAME"]; komme ich dann quasi an den Pfadnamen.
      Allerdings wird der Pfad der Datei Sohn.php ausgegeben ich möchte allerdings den Pfad der Papa.php.
      Es scheint mir als ob zuerst die inkludierte Datei verarbeitet wird und dann das verarbeitete erst in die aufrufende eingespielt wird.
      d.h. _SERVER["PATH_INFO"] speichert den Pfad der Sohn.php da sie verarbeitet wird und gibt diesen dann der Aufrufenden weiter.
      Mit _SERVER["PATH_INFO"] in der Papa.php erhalte ich den von mir gewünschten Pfad jedoch nicht in der Sohn.php

      Was mache ich Falsch? Wo ist der Denkfehler?

      Guss Roni

      1. hi,

        Ich verstehe nicht ganz!

        dann hilft länger nachdenken.

        Mit echo $_SERVER["PATH_NAME"]; komme ich dann quasi an den Pfadnamen.
        Allerdings wird der Pfad der Datei Sohn.php ausgegeben ich möchte allerdings den Pfad der Papa.php.

        dann könntest du ja mal SCRIPT_FILENAME anschauen ...

        gruß,
        wahsaga

        --
        "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
        1. dann könntest du ja mal SCRIPT_FILENAME anschauen ...

          Habe ich versucht leider folgendes Problem:
          undefined index ...

          Kann es Sein das mein Provider das einstellen muß oder das diese php Version das nicht kann?

          Denn beim Aufruf von phpinfo() erscheinen alle möglichen
          _SERVER["..."] Variablen, aber nicht _SERVER["SCRIPT_FILENAME"].

          Ist soetwas vom Provider einstellbar?

          Guss Roni

          1. dann könntest du ja mal SCRIPT_FILENAME

            Habe ich versucht leider folgendes Problem:
            undefined index ...

            Kann es Sein das mein Provider das einstellen muß oder das diese php Version das nicht kann?

            Denn beim Aufruf von phpinfo() erscheinen alle möglichen
            _SERVER["..."] Variablen, aber nicht _SERVER["SCRIPT_FILENAME"].

            Ist soetwas vom Provider einstellbar?

            Für alle die auf SCRIPT_FILENAME nicht zugreifen können eine möglichkeit:

            Die zu includierende Datei mittels
            $ausgabe=file_get_contents(Sohn.php);
            in die Variable $ausgabe schreiben
            Achtung es müssen die einleitenden und ausleitenden <? ?> php-Markierungen aus der Datei entfernt werden.
            Befindet sich in der Datei korrekter php-code
            wird mit:
            eval($ausgabe); Der Code ausgeführt.
            steht also in der phpDatei echo $_SERVER["PATH_INFO"];
            wird der Pfad der Aufrufenden Datei gezeigt.

            Egal wie dem auch sei.
            Es wurde mir geholfen
            Ciao zusammen

            1. hi,

              Für alle die auf SCRIPT_FILENAME nicht zugreifen können eine möglichkeit:

              Die zu includierende Datei mittels
              $ausgabe=file_get_contents(Sohn.php);
              in die Variable $ausgabe schreiben
              Achtung es müssen die einleitenden und ausleitenden <? ?> php-Markierungen aus der Datei entfernt werden.
              Befindet sich in der Datei korrekter php-code
              wird mit:
              eval($ausgabe); Der Code ausgeführt.

              das ist so ziemlich der größte unfug, den man in dem fall machen kann.

              gruß,
              wahsaga

              --
              "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
              1. hi,

                das ist so ziemlich der größte unfug, den man in dem fall machen kann.

                Oh nein warum denn das?
                ich meine es funktioniert doch!
                Wie komme ich denn sonst an den Dateiname ran?
                SCRIPT_FILENAME steht mir irgendwie nicht zur verfügung.

                Es fällt mir nix mehr ein.

                Gruss Roni

                1. hi,

                  Oh nein warum denn das?

                  weil der satz "eval is evil" nicht umsonst geprägt wurde.
                  du solltest es, wo immer möglich (und das ist fast ausschließlich immer), vermeiden.

                  Wie komme ich denn sonst an den Dateiname ran?

                  du könntest beispielsweise im hauptscript eine variable setzen und da den namen reinschreiben, und diese dann im include abfragen ... zwar auch nicht ideal, aber allemal besser als eval.

                  SCRIPT_FILENAME steht mir irgendwie nicht zur verfügung.

                  wundert mich, dass das nicht vorhanden ist.
                  kannst du mal das ergebnis von print_r($_SERVER) komplett zeigen?

                  gruß,
                  wahsaga

                  --
                  "Look, that's why there's rules, understand? So that you _think_ before you break 'em."
                  1. Hello,

                    weil der satz "eval is evil" nicht umsonst geprägt wurde.
                    du solltest es, wo immer möglich (und das ist fast ausschließlich immer), vermeiden.

                    es ist nicht hässlicher als include().
                    Ganz im Gegenteil! Eval führt eine Prüfung des Codes durch und da es schon recht komplex ist, mit den Maskierungen richtig umzugehen, wenn der Der Code im selben Script defoniert wird, hält es sowieso meistens das Script an.

                    Eval() ist nür böse, wenn man externe Quellen parsen lässt. Aber das ist bei include() nicht anders!

                    Harzliche Grüße aus http://www.annerschbarrich.de

                    Tom

                    --
                    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                    Nur selber lernen macht schlau
                    1. Hello,

                      Ganz im Gegenteil! Eval führt eine Prüfung des Codes durch und da es schon recht komplex ist, mit den Maskierungen richtig umzugehen, wenn der Der Code im selben Script defoniert wird, hält es sowieso meistens das Script an.

                      Du hast recht, die richtige Maskierung macht mich krank.
                      Darum hoffe ich auf eine bessere Lösung?

                      Ich habe schon versucht im Hauptscript eine Variable zu setzen und die dann im inkludierten Script abzufragen.
                      Leider bekomme ich eine Fehlermeldung die besagt das er die Variable nicht kennt.
                      Muß man da eine bestimmte Vorgehensweise beachten?

                      Roni

                      1. Hello,

                        Du hast recht, die richtige Maskierung macht mich krank.

                        Lass es Dir doch maskieren.

                        Schreib den Code so, als würdest Du ihn direkt in ein Script schreiben.
                        Prüfe ihn auch als eigenständiges Script.

                        Dann mach copy und Paste und schreib ihn in eine Datei.
                        Diese kannst Du dann wieder laden und die maskierungen hinzufügen lassen.

                        Das Ergebnis kannst Du dann im Quelltext einer String-Variablen zuweisen.

                        Die Maskierungen sind doch nur notwendig, wenn der zu parsende Code innerhalb des Scriptes deklariert wird, da er dann ggf. doppelt geparst wird.

                        Harzliche Grüße aus http://www.annerschbarrich.de

                        Tom

                        --
                        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                        Nur selber lernen macht schlau
                        1. Hello,

                          Lass es Dir doch maskieren.

                          Schreib den Code so, als würdest Du ihn direkt in ein Script schreiben.
                          Prüfe ihn auch als eigenständiges Script.

                          Dann mach copy und Paste und schreib ihn in eine Datei.
                          Diese kannst Du dann wieder laden und die maskierungen hinzufügen lassen.

                          Das Ergebnis kannst Du dann im Quelltext einer String-Variablen zuweisen.

                          Danke, probier ich aus?

                          Roni

                        2. Hello,

                          Lass es Dir doch maskieren.

                          Schreib den Code so, als würdest Du ihn direkt in ein Script schreiben.
                          Prüfe ihn auch als eigenständiges Script.

                          Dann mach copy und Paste und schreib ihn in eine Datei.
                          Diese kannst Du dann wieder laden und die maskierungen hinzufügen lassen.

                          Das Ergebnis kannst Du dann im Quelltext einer String-Variablen zuweisen.

                          Die Maskierungen sind doch nur notwendig, wenn der zu parsende Code innerhalb des Scriptes deklariert wird, da er dann ggf. doppelt geparst wird.

                          Super funktioniert

                          Danke Roni

                  2. hi,

                    wundert mich, dass das nicht vorhanden ist.
                    kannst du mal das ergebnis von print_r($_SERVER) komplett zeigen?

                    Array ( [ALLUSERSPROFILE] => C:\Dokumente und Einstellungen\All Users.WINNT [CommonProgramFiles] => C:\Programme\Gemeinsame Dateien [COMPUTERNAME] => SVR-WEB01 [ComSpec] => C:\WINNT\system32\cmd.exe [CONTENT_LENGTH] => 0 [GATEWAY_INTERFACE] => CGI/1.1 [HTTPS] => off [HTTP_HOST] => 192.168.7.8 [INSTANCE_ID] => 4 [LOCAL_ADDR] => 192.168.7.8 [NUMBER_OF_PROCESSORS] => 1 [Os2LibPath] => C:\WINNT\system32\os2\dll; [OS] => Windows_NT [Path] => C:\WINNT\system32;C:\WINNT;C:\WINNT\System32\Wbem;C:\Programme\Support Tools\;C:\Programme\Microsoft SQL Server\80\Tools\Binn\;C:\IIS\www.ifp-online.de\ [PATHEXT] => .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH [PATH_INFO] => /Roni/ifbAG/html/seitennavi/seitennavi_Leistungsspektrum.php [PATH_TRANSLATED] => C:\IIS\Test-Web\Roni\ifbAG\html\seitennavi\seitennavi_Leistungsspektrum.php [PROCESSOR_ARCHITECTURE] => x86 [PROCESSOR_IDENTIFIER] => x86 Family 15 Model 2 Stepping 7, GenuineIntel [PROCESSOR_LEVEL] => 15 [PROCESSOR_REVISION] => 0207 [ProgramFiles] => C:\Programme [REMOTE_ADDR] => 192.168.7.8 [REMOTE_HOST] => 192.168.7.8 [REQUEST_METHOD] => GET [SCRIPT_NAME] => /Roni/ifbAG/html/seitennavi/seitennavi_Leistungsspektrum.php [SERVER_NAME] => 192.168.7.8 [SERVER_PORT] => 80 [SERVER_PORT_SECURE] => 0 [SERVER_PROTOCOL] => HTTP/1.0 [SERVER_SOFTWARE] => Microsoft-IIS/5.0 [SystemDrive] => C: [SystemRoot] => C:\WINNT [TEMP] => C:\WINNT\TEMP [TMP] => C:\WINNT\TEMP [USERPROFILE] => C:\Dokumente und Einstellungen\Default User.WINNT [windir] => C:\WINNT [PHP_SELF] => /Roni/ifbAG/html/seitennavi/seitennavi_Leistungsspektrum.php [argv] => Array ( ) [argc] => 0 )

                    Dabei gilt:
                    /Roni/ifbAG/html/seitennavi/seitennavi_Leistungsspektrum.php
                    ist die Datei die inkludiert wurde

                    Die eigentliche Datei, welche die oben genannte inkludiert
                    trägt den Namen Kunden_und_Maerkte.php genauer:
                    /Roni/ifbAG/html/Leistungsspektrum/Kunden_und_Maerkte.php

                    Gruss Roni