Guten Abend,
ich bin gerade auf ein "Phänomen" gestoßen, dass mich doch ziemlich verwirrt.
Ich hab ein Script geschrieben das Funktioniert. Es funktioniert nicht nur bei mir, sondern auch auf anderen Servern.
Dieses Script bindet verschiedene Dateien mittels require() ein. Dabei bereits eingebundene Dateien wiederum Dateien über require() ein.
Hier mal die beispielhafte Verzeichnisstruktur:
Im Prinzip läuft das Script nun so ab:
Der Benutzer ruft die admin.php auf.
Je nachdem welche Option in der admin.php gewählt wird, wird die entsprechende Datei in die admin.php eingebunden.
admin.php:
Die option1.php verwaltet jetzt alle Möglichkeiten die zu dieser Option zur Verfügung stehen. Wenn keine Möglichkeit gewählt wird, bindet die option1.php die Datei option1_start.php, sowie die Datei admin_header.php ein.
option1.php:
Und hier wird mein "Phänomen" schon deutlich:
Ich kann aus "option1.php" per require() die Dateien "admin_header.php" und die "option1_start.php" einbinden (die ja auf unterschiedlichen Ebenen der Verzeichnisstruktur liegen), ohne irgendwelche Pfadangaben zu machen. Ich grübel schon 'ne weile darüber, denn was ich bis jetzt gefunden habe, sagt, dass require() immer vom aufrufenden Script ausgeht. Also müsste ich ja entweder die "admin.php" (die die "option1.php" einbindet) als Ur-Script sehen und die Pfadangabe auf die "option1_start.php" so angeben: "require 'option1/option1_start.php'", oder die "option1.php" als Ur-Script annehmen und die Pfadangabe auf die "header_admin.php" so angeben: "require '../admin_header.php'".
Ganz verwirrt hat es mich, dass ich die Datei "option1_header.php" auf zwei Arten in die "option1.php" einbinden kann:
In beiden Fällen funktioniert der Code einwandfrei (auch HTML-Pfade und so).
Trotzdem werde ich das Gefühl nicht los, dass nur eine Version die absolut richtige ist und unter allen Umständen Fehlerfrei läuft.
Vielleicht könnt ihr mir helfen.
ich bin gerade auf ein "Phänomen" gestoßen, dass mich doch ziemlich verwirrt.
Ich hab ein Script geschrieben das Funktioniert. Es funktioniert nicht nur bei mir, sondern auch auf anderen Servern.
Dieses Script bindet verschiedene Dateien mittels require() ein. Dabei bereits eingebundene Dateien wiederum Dateien über require() ein.
Hier mal die beispielhafte Verzeichnisstruktur:
PHP:
admin/
option1/
option1.php
option1_header.php
option1_speichern.php
option1_start.php
option2/
......
admin.php
admin_header.php
Im Prinzip läuft das Script nun so ab:
Der Benutzer ruft die admin.php auf.
Je nachdem welche Option in der admin.php gewählt wird, wird die entsprechende Datei in die admin.php eingebunden.
admin.php:
PHP:
require 'option1/option1.php'
Die option1.php verwaltet jetzt alle Möglichkeiten die zu dieser Option zur Verfügung stehen. Wenn keine Möglichkeit gewählt wird, bindet die option1.php die Datei option1_start.php, sowie die Datei admin_header.php ein.
option1.php:
PHP:
require 'admin_header.php'
require 'option1_start.php';
Und hier wird mein "Phänomen" schon deutlich:
Ich kann aus "option1.php" per require() die Dateien "admin_header.php" und die "option1_start.php" einbinden (die ja auf unterschiedlichen Ebenen der Verzeichnisstruktur liegen), ohne irgendwelche Pfadangaben zu machen. Ich grübel schon 'ne weile darüber, denn was ich bis jetzt gefunden habe, sagt, dass require() immer vom aufrufenden Script ausgeht. Also müsste ich ja entweder die "admin.php" (die die "option1.php" einbindet) als Ur-Script sehen und die Pfadangabe auf die "option1_start.php" so angeben: "require 'option1/option1_start.php'", oder die "option1.php" als Ur-Script annehmen und die Pfadangabe auf die "header_admin.php" so angeben: "require '../admin_header.php'".
Ganz verwirrt hat es mich, dass ich die Datei "option1_header.php" auf zwei Arten in die "option1.php" einbinden kann:
PHP:
require 'option1/option1_header.php'
und
require 'option1_header.php'
In beiden Fällen funktioniert der Code einwandfrei (auch HTML-Pfade und so).
Trotzdem werde ich das Gefühl nicht los, dass nur eine Version die absolut richtige ist und unter allen Umständen Fehlerfrei läuft.
Vielleicht könnt ihr mir helfen.