include zurückverfolgen
Roni
- php
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?
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
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
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
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
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
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
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
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
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
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
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
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
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
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