Zum Inhalt springen

[PHP] Wie verwaltet PHP Include, fopen unsw. Pfade ?


Aiun

Empfohlene Beiträge

hi,

folgender Fall:

- ich habe ein Script für eine Schnittstelle geschrieben (Socketverbindung)

- alle kommunikation wird mitgeloggt in Dateien.

- einige Standard-blöcke in der Kommunikation sind in templates vorbereitet.

Datei / ORdnerstruktur:

./Anwendung.php

./Schnittstelle/

./Schnittstelle/Schnittstellen_Klasse.php

./Schnittstelle/Test.php

./Schnittstelle/Template_Klasse.php

./Schnittstelle/Templates/

./Schnittstelle/Templates/Template.tpl

die Schnittstelle wird auf zwei Varianten angesteuert:

1.)

ich rufe die test.php auf

test.php included Schnittstellen_Klasse.php

Schnittstellen_Klasse.php included template_Klasse.php

Template_Klasse.php liest mit fopen die template.tpl ein

die Schnittstelle_Klasse.php schreibt logdateien in den ordner ./schnittstelle/

so weit ok

2.)

die Anwendung.php wird aufgerufen

Anwendung.php included Schnittstellen_Klasse.php

Schnittstellen_Klasse.php included template_Klasse.php

Template_Klasse.php liest mit fopen die template.tpl ein

-> FEHLER, Pfad nicht korrekt. Ich muss den Ordner /Schnittstelle/ mit in den fopen-Pfad einbeziehen.

Seltsam, denn das include von Schnittstelle_Klasse.php nach template_Klasse.php funktioniert auch ohne "require_once('template_klasse.php');"

gleicher Fehler tritt beim schreiben der logdateien auf, auch die landen nicht im Unterordner.

Frage:

kann mir jemand einen Tip / Doku geben wo steht wofür man welchen pfad braucht / wie man das möglichst dynamisch lösen kann ?

Frage 2:

ich habe in anderen scripten alle includes jeweils relativ zum Hauptordner der Anwendung / Position der aufgerufenen Datei angegeben NICHT relativ zur includenden Datei, ohne Fehler.... von wo aus sucht PHP alles und warum ?

lässt sich da irgendwas konfigurieren ?

danke

Link zu diesem Kommentar
Auf anderen Seiten teilen

ist doch klar, include bedeutet nichts anderes als quellcode aus einer datei in eine andere datei zu importieren, also grosse quellcodeteile auszulagern.

steht im quellcode hardcoded drin ein relativer pfad, knallt es. logisch oder ?

schreib in der Template_Klasse.php den absoluten pfad zur template.tpl und dann wird es gehen. genau so bei den logdateien.

dynamisch geht es natürlich auch und zwar über Variablen, die die einzelnen Pfade beschreiben.

$PATH="/der/weg/bis/zum/include";

diese packste dann in eine zentrale Datei namens, ENV.php und includierst vorne weg.

beim fopen steht dann $PATH."/template.tpl"

Link zu diesem Kommentar
Auf anderen Seiten teilen

naja, include funktioniert hier aber mit relativem pfad

Datei1

require_once("ordner/datei2");

Datei2

require_once("datei3");

Datei 2 und 3 liegen im gleichen verzeichnis.

aber ich habe auch schon mit

Datei1

require_once("ordner/datei2");

Datei2

require_once("ordner/datei3");

gearbeitet, und beides funktioniert. Das verwirrt mich ein wenig, daher frage ich.

natürlich hast du mit dem festen Pfad auch recht und das ist eine sache die ich auch machen werde...aber mich interessiert trotzdem wie PHP sowas handhabt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Frage:

kann mir jemand einen Tip / Doku geben wo steht wofür man welchen pfad braucht / wie man das möglichst dynamisch lösen kann ?

Frage 2:

ich habe in anderen scripten alle includes jeweils relativ zum Hauptordner der Anwendung / Position der aufgerufenen Datei angegeben NICHT relativ zur includenden Datei, ohne Fehler.... von wo aus sucht PHP alles und warum ?

lässt sich da irgendwas konfigurieren ?

Antwort:

PHP geht immer von dem Pfad aus, wo das Skript liegt. Da ein include nichts anderes ist, als ein temporäres Copy/Paste, geht also der erste include ( include("schnittstelle/skript.php"); ) noch, der include in der Datei skript.php hingegen geht dann schief, weil im Hauptorder ja nicht dieselben Dateien wie im Ordner schnittstelle liegen. Denn beim zweiten include wird das ganze ja immernoch vom dem skript aufgerufen, was im Hauptordner liegt. Ein Include kopiert den Quelltext nur an die Stelle wo der Befehl include im Quelltext steht und führt den code dann weiter aus. Da da jetzt aber eine Kopie des "includierten" Skriptes steht, wird natürlich dieser code jetzt ausgeführt. Aber eben vom ersten Skript.

Du gehst davon aus, dass ein include das "includierte" Skript ausführt und somit auch der Pfad entsprechend anders ist.

Um das ganze "dynamisch" zu machen mit den Pfaden, legst du am besten irgendwo eine Config-Datei ab, die den absoluten Pfad zum Schnittstellenordner enthält. Dieser kann dann ja einfach geändert und angepasst werden und stimmt dennoch bei allen aufrufen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...